zoukankan      html  css  js  c++  java
  • SpringMVC使用StandardServletMultipartResolver上传文件

    DispatcherServlet并没有实现任何解析multipart请求数据的功能,它将该任务委托给了Spring中MultipartResolver策略接口的实现,通过该接口的实现类来解析multipart请求中的内容。从Spring3.1开始,Spring内置了两个MultipartResolver的实现供我们选择:

    • StandardServletMultipartResolver  依赖于Servlet3.0对multipart请求的支持(始于Spring3.1)
    • CommonsMultipartResolver  使用Jakarta Commons FileUpload解析multipart请求

    一般来说,StandardServletMultipartResolver将会是优先选择的方案,它使用了Servlet所提供的原生功能支持,并不需要依赖任何第三方组件。如果我们需要将应用部署到Servlet3.0之前的容器中,或者还没有使用Spring3.1或者更高的版本,那么可能就需要使用CommonsMultipartResolver了

    (1)将StandardServletMultipartResolver添加到Spring容器中

    1     @Bean
    2     public MultipartResolver multipartResolver(){
    3         return new StandardServletMultipartResolver();
    4     }

    (2)在Servlet中(DispatcherServlet)指定multipart的配置

     1     @Override
     2     protected void customizeRegistration(ServletRegistration.Dynamic registration) {
     3         super.customizeRegistration(registration);
     4         String location = "d:\tmp\";
     5         File file = new File(location);
     6         if(!file.exists() && !file.isDirectory()){
     7             file.mkdir();
     8         }
     9         long maxFileSize = 2097152; //2M
    10         long maxRequestSize = 4194304;  //4M
    11         int fileSizeThreshold = 0;
    12         MultipartConfigElement multipartConfigElement = new MultipartConfigElement(location,maxFileSize,maxRequestSize,fileSizeThreshold);
    13         registration.setMultipartConfig(multipartConfigElement);//配置对multipart的支持
    14     }

    (3)编写上传文件的Form表单

    将<form>标签的enctype设置为multipart/form-data,这会告诉浏览器以multipart数据的形式提交表单,而不是以表单数据的形式进行提交。

     1 <!DOCTYPE html>
     2 <html lang="en" xmlns:th="http://www.thymeleaf.org">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>上传页面</title>
     6 </head>
     7 <body>
     8     <form method="post" th:action="@{/file/upload}" enctype="multipart/form-data">
     9         描述:<input type="text" name="desc"/>
    10         文件:<input type="file" name="file" accept="image/jpeg,image/png,image/gif"/>
    11         <input type="submit" value="上传"/>
    12     </form>
    13 </body>
    14 </html>

    (4)编写上传的控制器

     1     @PostMapping("/file/upload")
     2     public String upload(@RequestParam String desc, @RequestParam MultipartFile file) throws IOException {
     3         if(!file.isEmpty()){
     4             String filePath = "d:\img\";
     5             File fileDir = new File(filePath);
     6             if(!fileDir.exists() && !fileDir.isDirectory()){
     7                 fileDir.mkdir();
     8             }
     9             file.transferTo(new File(filePath + file.getOriginalFilename()));
    10         }
    11         return "file/upload";
    12     }
  • 相关阅读:
    关于晋升的5个建议
    不拘一格:网飞的自由与责任工作法
    博恩·崔西的人生管理课
    老板防止我上班摸鱼,给我装了个chrome插件
    彻底搞懂彻底搞懂事件驱动模型
    python 100 days
    不要懒惰地重复自己
    不要让“追求完美”阻碍你做决策
    Windows上使用Python Terminal(终端控制台) 打印日志带有特殊符号时显示不出来
    Python3 Mysql DBhelper封装
  • 原文地址:https://www.cnblogs.com/fanqisoft/p/10261536.html
Copyright © 2011-2022 走看看