文件上传

作者: Czw_hacker | 来源:发表于2016-11-30 15:16 被阅读66次

    commons-fileupload文件上传

    @WebServlet("/upload")
    public class FileUploadServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.getRequestDispatcher("upload.jsp").forward(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            //文件保存路径
            File saveDir = new File("D:/upload");
            if (!saveDir.exists()) {
                saveDir.mkdir();
            }
            //文件缓存路径
            File tempDir = new File("D:/tp");
            if (!tempDir.exists()) {
                tempDir.mkdir();
            }
    
            //判断表单是否有entype属性
            if (ServletFileUpload.isMultipartContent(req)) {
    
                DiskFileItemFactory itemFactory = new DiskFileItemFactory();
                itemFactory.setSizeThreshold(1024);//设置缓冲区大小
                itemFactory.setRepository(tempDir);//设置临时文件路径
    
                //获取ServletFileUpload对象,设置文件最大上传大小
                ServletFileUpload servletFileUpload = new ServletFileUpload(itemFactory);
                servletFileUpload.setFileSizeMax(1024 * 1024 * 10);
    
                try {
                    //获取所有表单元素(普通元素+文件元素)返回值为FileItem对象数组
                    List<FileItem> fileItemList = servletFileUpload.parseRequest(req);
                    for (FileItem fileItem : fileItemList) {
                        if (fileItem.isFormField()) {
                            //普通元素
                            System.out.println("getFieldName ->" + fileItem.getFieldName());//获取普通元素name属性的值
                            System.out.println("getString ->" + fileItem.getString("UTF-8"));//获取普通元素文本框输入的值
    
                        } else {
                            //文件元素
                            System.out.println("getFieldName ->" + fileItem.getFieldName());//获取文件元素name属性的值
                            System.out.println("getName ->" + fileItem.getName());//获取文件的初始名
    
                            String uuid = UUID.randomUUID().toString();
                            String name = uuid + fileItem.getName().substring(fileItem.getName().lastIndexOf("."));
    
                            //获取文件输入流
                            InputStream inputStream = fileItem.getInputStream();
                            FileOutputStream outputStream = new FileOutputStream(new File(saveDir, name));
    
                            IOUtils.copy(inputStream, outputStream);
                          /* byte[] buffer = new byte[1024];
                           int len = -1;
                           while ((len = inputStream.read(buffer))!=-1){
                                outputStream.write(buffer,0,len);
                           }*/
                            outputStream.flush();
                            outputStream.close();
                            inputStream.close();
                            System.out.println("上传成功");
                        }
                    }
                } catch (FileUploadException e) {
                    e.printStackTrace();
                }
            } else {
                System.out.println("文件上传失败");
            }
       }
    }
    
    

    jsp代码

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    
    <%--文件上传method方法必须为post
    enctype属性值必须为multipart/form-data--%>
    
    <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="text" name="desc"> <br>
        <input type="file" name="file"> <br>
        <button>上传</button>
    </form>
    </body>
    </html>
    

    Servlet3文件上传

    @WebServlet("/upload2")
    @MultipartConfig
    public class FileUploadServlet2 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.getRequestDispatcher("upload2.jsp").forward(req,resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.setCharacterEncoding("UTF-8");
            String desc = req.getParameter("dasc");
    
            //通过name属性获取Part对象
            Part part = req.getPart("file");
            System.out.println("getname ->"+part.getName());//name属性值
            System.out.println("ContentType ->"+part.getContentType());//文件的MIME类型
            System.out.println("Size ->"+part.getSize());//文件大小(字节)
            System.out.println("SubmittedFileName ->"+part.getSubmittedFileName());//文件上传名字
    
            FileUtils.byteCountToDisplaySize(part.getSize());
            File saveDir = new File("D:/upload");
            if(saveDir.exists()){
                saveDir.mkdir();
            }
    
            String fileName = part.getSubmittedFileName();
    
            String uuid = UUID.randomUUID().toString();
            String name = uuid + fileName.substring(fileName.lastIndexOf("."));
    
            InputStream inputStream = part.getInputStream();
            FileOutputStream outputStream = new FileOutputStream(new File(saveDir,name));
            IOUtils.copy(inputStream,outputStream);
    
            outputStream.flush();
            outputStream.close();
            inputStream.close();
            System.out.println("成功");
        }
    }
    

    相关文章

      网友评论

        本文标题:文件上传

        本文链接:https://www.haomeiwen.com/subject/jzrtmttx.html