Spring6中删除了CommonsMultipartResolver类后,使用springmvc如何上传文件

 在新的Spring6中,官方删除了之前上传文件使用的CommonsMultipartResolver类,导致之前的上传文件方法行不通了。

我们可以在Spring6官网中看到官方的声明:

大致意思就是:

CommonsMultipartResolver从 Spring Framework 6.0 及其新的 Servlet 5.0+ 基线开始,基于 Apache Commons FileUpload 的过时版本不再可用。

在网上查找后发现出现这个问题的人并不多,只好自己摸索了一下,去bingGPT和ChatGPT搜索了一下,一番操作发现上传成功了。

先给出我的环境:

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>6.0.11</version>
        </dependency>

        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.0.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring6</artifactId>
            <version>3.1.1.RELEASE</version>
        </dependency>

使用的Spring6的环境。

下面给出我的解决方法: 

首先在你的web.xml文件配置前端处理器-DispatcherServlet的标签中:

        <servlet>
            <servlet-name>DispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:SpringMVC.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>

加上下面的配置:

           <multipart-config>
                <!--         上传文件最大为多少   -->
                <max-file-size>10485760</max-file-size>
                <!--         最大的请求大小   -->
                <max-request-size>10485760</max-request-size>
                <!--         多大以上的文件可以上传   -->
                <file-size-threshold>0</file-size-threshold>
            </multipart-config>

 

接着在Spring的配置文件中,把 

org.springframework.web.multipart.commons.CommonsMultipartyResolver

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartyResolver"/>

替换成
org.springframework.web.multipart.support.StandardServletMultipartResolver

 <bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>

 同时要注意,这个bean的id一定要是multipartResolver,千万不要写错。

最后在你的Controller类的方法中,MultipartFile类型的形参前面加上@RequestParam注解,注意别忘了它的value属性

 @RequestMapping("/testUpload")
    public String testUpload(@RequestParam("picture") MultipartFile picture,
HttpSession session) throws IOException {
        ServletContext servletContext = session.getServletContext();
        if (picture.isEmpty()) {
            return "上传失败,请选择文件";
        }
        String picturePath = servletContext.getRealPath("picture");
        String fileName = picture.getOriginalFilename();
        File dest = new File(picturePath);
        if (!dest.exists()) {
            dest.mkdirs();
        }
        String finalPath = picturePath + File.separator + fileName;
        System.out.println(finalPath);
        picture.transferTo(new File(finalPath));
        return "success";
    }

加入注解后,获取到上传文件的真实路径和文件名,拼接后传给transferTo方法即可。

在页面中点击上传:

 服务器提示成功:

至此结束。

只是分享了我的解决方法,希望能帮到一些碰到同样问题的人。

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值