SpringMVC使用MultipartResolver实现文件上传

 更新时间:2023年02月24日 11:28:51   作者:loli_kong  
MultipartResolver 用于处理文件上传,当收到请求时 DispatcherServlet 的 checkMultipart() 方法会调用 MultipartResolver 的 isMultipart() 方法判断请求中是否包含文件

SpringMVC 中,文件的上传,是通过 MultipartResolver 实现的。 所以,如果要实现文

件的上传,只要在 spring-mvc.xml 中注册相应的 MultipartResolver 即可。

MultipartResolver 的实现类有两个:

  • CommonsMultipartResolver
  • StandardServletMultipartResolver

两个的区别:

  • 第一个需要使用 Apache 的 commons-fileupload 等 jar 包支持,但它能在比较旧的servlet 版本中使用。
  • 第二个不需要第三方 jar 包支持,它使用 servlet 内置的上传功能,但是只能在Servlet 3 以上的版本使用。

我们这里使用第一种来实现上传。

1.导入依赖

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>

2.再application中添加配置

<!-- 多部分文件上传 -->
<bean id="multipartResolver"
      class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="defaultEncoding" value="UTF-8"/>
    <property name="maxUploadSize" value="104857600"/>
    <property name="maxInMemorySize" value="4096"/>
</bean>

**maxUploadSize:**设置允许上传文件的最大值,以字节为单位。默认为-1,表示无限制。

**defaultEncoding:**表示用来请求解析request请求的默认编码格式,当没有指定时默认使用ISO-8859-1。当request自己指明了他的编码格式的时候就会忽略这里的defaultEncoding。

3.编写controller代码

    @Autowired
    private HttpServletRequest request;
    @PostMapping("native")
    public String nativeUpload(@RequestParam("file") MultipartFile file, String folder) throws UnsupportedEncodingException {
        // 拿到webapp下面img文件夹的位置
        String path = request.getSession().getServletContext().getRealPath("img");
        // getOriginalFilename获取文件的原始名称,例如:2.jpg
        String filePath = path + "\\" + file.getOriginalFilename();
        File destFile = new File(filePath);
        // 如果目录不存在
        if (!destFile.getParentFile().exists()) {
            // 创建目录(可能位多层)
            destFile.mkdirs();
        }
        // destFile:目标文件
        try {
            file.transferTo(destFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
        String res = "http://localhost:9101/img/" + file.getOriginalFilename();
        return new String(res.getBytes(), "UTF-8");
    }

这里MultipartFile是spring类型,代表HTML中form data方式上传的文件,包含二进制数据+文件名称

到此这篇关于SpringMVC使用MultipartResolver实现文件上传的文章就介绍到这了,更多相关SpringMVC MultipartResolver内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何去掉IntelliJ IDEA中mybatis对应的xml文件警告

    如何去掉IntelliJ IDEA中mybatis对应的xml文件警告

    这篇文章主要介绍了如何去掉IntelliJ IDEA中mybatis对应的xml文件警告问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Java笔记之从IO模型到Netty框架学习初识篇

    Java笔记之从IO模型到Netty框架学习初识篇

    Netty作为一个已经发展了十多年的框架,已然非常成熟了,其中有大量的细节是普通使用者不知道或者不关心的,本文带你查缺补漏掌握Netty的使用
    2022-03-03
  • Spring boot 应用实现动态刷新配置详解

    Spring boot 应用实现动态刷新配置详解

    这篇文章主要介绍了spring boot 配置动态刷新实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09
  • SpringBoot配置项目访问路径URL的根路径方式

    SpringBoot配置项目访问路径URL的根路径方式

    这篇文章主要介绍了SpringBoot配置项目访问路径URL的根路径方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 简单谈谈java中final,finally,finalize的区别

    简单谈谈java中final,finally,finalize的区别

    Java中final、finally、finalize的区别与用法,困扰了不少学习者,下面我们就这个问题进行一些探讨,希望对大家的学习有所帮助。
    2016-05-05
  • Java利用异常中断当前任务的技巧分享

    Java利用异常中断当前任务的技巧分享

    在日常开发中,我们经常遇到调用别人的代码来完成某个任务,但是当代码比较耗时的时候,没法从外部终止该任务,所以本文为大家介绍了如何利用异常中断当前任务,需要的可以参考下
    2023-08-08
  • Java动态线程池插件dynamic-tp集成过程浅析

    Java动态线程池插件dynamic-tp集成过程浅析

    这篇文章主要介绍了Java动态线程池插件dynamic-tp集成过程,dynamic-tp是一个轻量级的动态线程池插件,它是一个基于配置中心的动态线程池,线程池的参数可以通过配置中心配置进行动态的修改
    2023-03-03
  • IDEA安装部署Alibaba Cloud Toolkit的实现步骤

    IDEA安装部署Alibaba Cloud Toolkit的实现步骤

    Alibaba Cloud Toolkit是阿里云针对IDE平台为开发者提供的一款插件,本文主要介绍了IDEA安装部署Alibaba Cloud Toolkit的实现步骤,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • Spring SpringMVC,Spring整合MyBatis 事务配置的详细流程

    Spring SpringMVC,Spring整合MyBatis 事务配置的详细流程

    这篇文章给大家介绍SSM整合详细流程步骤 Spring SpringMVC,Spring整合MyBatis 事务配置,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-10-10
  • Springmvc 4.x利用@ResponseBody返回Json数据的方法

    Springmvc 4.x利用@ResponseBody返回Json数据的方法

    这篇文章主要介绍了Springmvc 4.x利用@ResponseBody返回Json数据的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04

最新评论