zoukankan      html  css  js  c++  java
  • 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>
    
    }
  • 相关阅读:
    java学习笔记(三)
    JAVA 学习笔记(2)
    java学习笔记
    第二次作业完成情况
    第一次作业完成情况
    使用MarkDown标记语言发博客
    《Java高级程序设计》第一周作业
    纪逝去的毕业后的两年时光
    #这是来联系Markdown语法的
    CodeFirst初体验——问题三
  • 原文地址:https://www.cnblogs.com/itchenfirst/p/7284253.html
Copyright © 2011-2022 走看看