zoukankan      html  css  js  c++  java
  • 百度上传文件到写入数据库之二

    /*
     * 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;
    
    /**
     *
     * 
     */
    @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);
    
                        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>
    
    }
  • 相关阅读:
    STL:set/multiset用法详解
    STL:list用法详解
    STL:deque用法详解
    STL:vector容器用法详解
    Axure RP chrome插件显示已损坏或者无法安装的解决方法
    怎样知道自己机器的出口网关IP(即外部IP)
    [Selenium]怎样验证页面是否有无变化
    [Selenium]刷新页面 Refresh page
    [SoapUI]怎样获取隐藏元素的文本内容Get text of hidden element
    [SoapUI]怎样从应答报文中获取某个字段的值,然后用其改写某个变量
  • 原文地址:https://www.cnblogs.com/itchenfirst/p/7285429.html
Copyright © 2011-2022 走看看