servlet 上传文件

来源:互联网 发布:途风旅游 怎么样 知乎 编辑:程序博客网 时间:2024/05/22 08:06
package com.upload;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;


public class Upload extends HttpServlet{
    
    private static String exts="flv swf mp4 jpg";//上传文件格式
    private static int maxByte=2000000;
    

    private static final long serialVersionUID = -4271323303918308796L;
    
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        
        request.setCharacterEncoding("utf-8");
        
        DiskFileItemFactory factory=new DiskFileItemFactory();//磁盘文件夹工厂
        ServletFileUpload sfu=new ServletFileUpload(factory);//使用factory 解析FileItem
        
        String basePath=Upload.class.getResource("/").getFile();
        basePath=basePath.substring(1, basePath.length());
        basePath=basePath.replace("/WEB-INF/classes", ""); //基本路径
        
        
        String uuid=UUID.randomUUID().toString().replace("-", "");//创建uuid 用于文件重命名
        
        SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
        String data=sdf.format(new Date());//时间格式化 用于创建上传文件夹
        
        StringBuffer sbf=new StringBuffer();
        
        String uploadFile=basePath+"upload/"+data+"/";//上传文件夹路径
        
        try {
        File UploadFile=new File(uploadFile); //创建上传文件夹
        if(!(UploadFile.isDirectory())){
            UploadFile.mkdirs();
        }
        factory.setRepository(UploadFile);//uploadFile大小大于setSizeThreshold设置的临界值时 存放于磁盘
        factory.setSizeThreshold(maxByte*1024);//设置文件存放方式的临界值
        sfu.setSizeMax(maxByte*1024);
        
        List<FileItem> list=sfu.parseRequest(request);//解析request
        
        for(int i=0;i<list.size();i++){
            FileItem item=list.get(i);
            String name=item.getName();
            String ext=FilenameUtils.getExtension(name);//获取上传文件后缀名

            for(String s:exts.split(" ")){
                if(s.equals(ext.toLowerCase())){
                   // ...
                }
            }
            
            name=uuid;
            sbf.append(name);
            sbf.append(".");
            sbf.append(ext);
            
            /*
             *读取文件内容
             * */
            InputStream ips=item.getInputStream();
            BufferedInputStream bis=new BufferedInputStream(ips);
            byte[] byt=new byte[bis.available()];
            bis.read(byt);
            /*
             *写入文件内容
             * */
            File file=new File(uploadFile+sbf.toString());
            FileOutputStream fos=new FileOutputStream(file);
            fos.write(byt);
            fos.flush();
            fos.close();
            bis.close();
        }
        
        } catch (FileUploadException e) {
            e.printStackTrace();
        }
    }

    public static String getExts() {
        return exts;
    }

    public static void setExts(String exts) {
        Upload.exts = exts;
    }

}