zoukankan      html  css  js  c++  java
  • 利用servlet3.0上传,纯原生上传,不依赖任何第三方包

    tomcat7里面自带的servlet3.0.jar,支持很多新特性,例如,annotation配置servlet,上传,异步等等。。。。

    如果你的tomcat版本低于7的话,单独在项目中引入servlet3.0.jar的话,有可能会出错,具体没研究过,可能是不兼容吧。所以要使用servlet3.0新特性的话,尽量使用tomcat7

    不多说了,贴上代码

    @WebServlet(name = "uploadServlet", urlPatterns = "/uploadServlet")
    @MultipartConfig
    public class ServletUpload extends HttpServlet {
    
        private static final long serialVersionUID = 2527441790014487640L;
    
        @Override
        public void doGet(HttpServletRequest request, HttpServletResponse response) {
            doPost(request, response);
        }
    
        @Override
        public void doPost(HttpServletRequest request, HttpServletResponse response) {
            try {
                request.setCharacterEncoding("utf-8");
                response.setCharacterEncoding("utf-8");
                response.setContentType("text/html;charset=utf-8");
                Collection<Part> parts = request.getParts();
                if (null == parts) {
                    // 抛出异常
                }
                for (Part part : parts) {
                    String header = part.getHeader("content-disposition");
                    String fileName = getFileName(header);
                    part.write("d:/" + fileName);
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ServletException e) {
                e.printStackTrace();
            }
    
        }
    
        /**
         * 获得文件名 fileName-----取得上传文件的后缀+uuid
         * 
         * @param header
         * @return
         */
        private String getFileName(String header) {
            String suffix = header.substring(header.lastIndexOf("."),
                    header.length() - 1);
            String fileName = UUID.randomUUID().toString().replace("-", "");
            return fileName + suffix;
        }
    }

    看起来是不是很简单吧,@MultipartConfig标注主要是为了辅助Servlet3.0中HttpServletRequest提供的对上传文件的支持。该标注写在Servlet类的声明之前,一表示该Servlet希望处理的请求时multipart/form-data类型的。另外,该标注还提供了若干属性用于简化对上传文件的处理

    @MultipartConfig标注属性

    fileSizeThershold         int型        是(可选)     描述:当前数据量大于该值时,内容将被写入文件。

    location                  String型       是(可选)     描述:存放生成文件的地址

    maxFileSize             long型         是(可选)     描述:允许上传的文件最大值,默认为-1,表示没有限制

    maxRequestSize      long型         是(可选)     描述:针对 multipart/form-data 请求的最大数量,默认为-1,表示没有限制

  • 相关阅读:
    ESP32环境搭建(arduino)
    uPyCraftIDE的介绍以及使用
    ESP32项目汇总
    MicroPython固件烧写
    Server 架构
    base家族在线解密工具
    第1年2月24日 iOS相机旋转问题 为什么UIimage.ciimage值为空
    第1年2月23日 du -sh * | sort -n 统计当前文件夹(目录)大小,并按文件大小排序
    第1年2月14日 mac 运行java
    第1年2月10日 检查iOS app证书过期时间信息
  • 原文地址:https://www.cnblogs.com/ppli/p/5715121.html
Copyright © 2011-2022 走看看