FileUpLoad

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package cn.toher.DataImport;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.coobird.thumbnailator.Thumbnails;
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.lang.StringUtils;

/**
 *
 * @author Toher
 */
@WebServlet(name = "FileUpLoad", urlPatterns = {"/FileUpLoad"})
public class FileUpLoad extends HttpServlet {

    private final String uploadLoation = "uploadfile"; //保存的文件夹名称

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("utf-8");  //设置编码

        //获取用户UserNo作用于文件夹创建
        String UserNo = "";
        if (StringUtils.isBlank(UserNo)) {
            UserNo = request.getParameter("userNo");
        }
        //设置项目访问路径
        String ContextPath = request.getContextPath();
        String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + ContextPath + "/";
        
        PrintWriter Printout = response.getWriter();
        //获得磁盘文件条目工厂  
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //获取文件需要上传到的路径
        String path = request.getSession().getServletContext().getRealPath("/") + uploadLoation + File.separator + UserNo;
       
        File pathFile = new File(path);
        //文件以及路径是否存在
        if (!pathFile.exists()) {
            //文件夹 
            pathFile.mkdirs();
        }
        //创建一个文件上传处理器
        factory.setRepository(new File(path));
        //设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室  
        factory.setSizeThreshold(1024 * 1024);
        //高水平的API文件上传处理  
        ServletFileUpload upload = new ServletFileUpload(factory);

        try {
            //可以上传多个文件,解析表单中的每一个表单项,封装成FileItem对象,以List方式返回,表单("enctype="multipart/form-data"")
            List<FileItem> list = (List<FileItem>) upload.parseRequest(request);
            String newFileName = "";
            for (FileItem item : list) {
                //获取表单的属性名字  
                String name = item.getFieldName();
                //如果获取的 表单信息是普通的 文本 信息  
                if (item.isFormField()) {
                    //获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的  
                    String value = item.getString();
                    request.setAttribute(name, value);
                } else {
                    //获取路径名  
                    String value = item.getName();
                    String fileExt = value.substring(value.lastIndexOf(".") + 1);
                    //设置新的文件名,这里我们采用日期格式,当然我们还可以使用UUID
                    SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
                    newFileName = df.format(new Date()) + (int) (Math.random() * 1000) + "." + fileExt;

                    String uploadFolder = path + File.separator + newFileName;
                    File file = new File(uploadFolder);
//        到这一步,就开始把request中获取到的文件写入到我预先处理好的路径地址加名字的文件中,write
                    item.write(file);
                }
                /* 上传成功后,进行数据返回!*/
            }
            Printout.println("{"code":"success","msg":"/"+ uploadLoation +"/"+UserNo+"/"+ newFileName + ""}");

        } catch (Exception e) {
            e.printStackTrace();
            Printout.println("{"code":"error","msg":""}");
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
原文地址:https://www.cnblogs.com/itchenfirst/p/7284253.html