zoukankan      html  css  js  c++  java
  • Servlet3.0一个或者多个文件上传

    package com.werner.servlet3;
    //1.使用注解@MultipartConfig将一个Servlet标志为支持文件上传
    //2.Servlet3.0 将Multipart/form-data的POST请求封装成Patr,通过Part对上传的文件进行操作.
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.MultipartConfig;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.Part;
    import java.io.File;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Collection;
    
    import static jdk.nashorn.internal.objects.NativeError.getFileName;
    
    /**
     *使用@WebServlet配置UploadServlet的访问路径
     *使用@WultipartConfig将一个Servlet标识为支持文件上传
     */
    @WebServlet(name = "UploadServlet",urlPatterns = "/UploadServlet")
    @MultipartConfig//标识Servlet支持文件上传
    public class UploadServle extends HttpServlet{
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.setCharacterEncoding("UTF-8");
            resp.setCharacterEncoding("UTF-8");
            resp.setContentType("test/html;charset=UTF-8");
            //存储路径
            String savePath = req.getServletContext().getRealPath("/WEB-INF/uploadFile");
            //获取上传的文件集合
            Collection<Part> parts = req.getParts();
            //上传单个文件
            if (parts.size()==1){
                //Servlet3.0将multipart/form-data的POST请求封装成Part,通过Part对商场的文件进行操作.
                // Psrt part =parts[0];//从上传的文件集合中获取Part对象
                Part part = req.getPart("file");//通过表单file控件(<input type="file" name="file"/>)的名字直接获取Part对象
                //  Servlet3 没有提供直接获取文件名的方法,需要从请求头中解析出来
                //获取请求头,请求头的格式:form-data; name="file";filename="snmpej--api.zip"
                String header = part.getHeader("content-disposition");
                //获取文件名
                String fileName = (String) getFileName(header);
                //把文件写到指定路径
                part.write(savePath+ File.separator+fileName);
            }else {
                //一次性上传多个文件
                for (Part part : parts) {//循环处理上传的文件
                    //获取请求头,请求头的个是;form-data;name="file";filename="snmpej--api.zip"
                    String header = part.getHeader("content-disposition");
                    //获取文件名
                    String fileName = (String) getFileName(header);
                    //把文件写到指定路径
                    part.write(savePath+File.separator+fileName);
                }
            }
            PrintWriter out = resp.getWriter();
            out.println("上传成功");
            out.flush();
            out.close();
    
        }
        /**
         * 根据请求头解析出文件名
         * 请求头的格式:
         * 火狐和google浏览器下:form-data; name="file"; filename="snmp4j--api.zip"
         * IE浏览器下:form-data; name="file"; filename="E:snmp4j--api.zip"
         * @param  header 请求头
         * @return 文件名
         *
         *
         */
        public String getFileName(String header){
            /**
             *  String[] tempArr1 = header.split(";");代码执行完之后,在不同的浏览器下,tempArr1数组里面的内容稍有区别
             *  火狐或者google浏览器下:tempArr1={form-data,name="file",filename="snmp4j--api.zip"}
             *  IE浏览器下:tempArr1={form-data,name="file",filename="E:snmp4j--api.zip"}
             *
             */
            String[] tempArr1 = header.split(";");
            /**
             * 火狐或者google浏览器下:tempArr2={filename,"snmp4j--api.zip"}
             * IE浏览器下:tempArr2={filename,"E:snmp4j--api.zip"}
             */
            String[] tempArr2 = tempArr1[2].split("=");
            //获取文件名,兼容各种浏览器的写法
            String fileName = tempArr2[1].substring(tempArr2[1].lastIndexOf("\") + 1).replaceAll(""", "");
            return fileName;
    
        }
    
    
    
    }
  • 相关阅读:
    转 哪个家伙说“网站去.Net化”?
    javascript prototype
    Spring作用,MVC容器作用
    javascript 闭包
    导入Excel数据至Access 宁静以致远
    My first mobile message 宁静以致远
    MyEclipse遇到的错误
    JAVAEE错误处理
    JavaEE ActionForm的高级应用
    hibernate
  • 原文地址:https://www.cnblogs.com/1218-mzc/p/7481958.html
Copyright © 2011-2022 走看看