SpringMVC文件上传实战

1、引包:
<!--文件上传-->
<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.4</version>
</dependency>
<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.3.1</version>
</dependency>
2、在application.xml中加入如下语句(添加解释器):
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="UTF-8" p:maxUploadSize="10240000"></bean>

通过p标签设置默认字符编码,设置文件最大大小

注意:在此处的Bean中一定要注明id:multipartResolver

为什么?
我们进入:web.xml中的DispatcherServlet:
我们看到这样一条:

	public static final String MULTIPART_RESOLVER_BEAN_NAME = "multipartResolver";

找到其使用的地方:

this.multipartResolver = context.getBean(MULTIPART_RESOLVER_BEAN_NAME, MultipartResolver.class);

IOC容器中,可以通过ID/name找到相应的类
因此,只有注明了ID才能找到相应的解释器

3、在form表单中修改enctype实现多文件上传
<%--
  Created by IntelliJ IDEA.
  User: fengxiaolin
  Date: 2020/11/11
  Time: 11:40 上午
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <form action="./file.do" enctype="multipart/form-data" method="post">
            <input name="name" placeholder="请输入姓名"><br>
            <input name="age" placeholder="请输入年龄"><br>
            <input name="mobile" placeholder="请输入电话"><br>
            <input name="addr" placeholder="请输入地址"><br>
            <input type="file" name="file"><br>
            <input type="submit" value="提交">
        </form>
    </body>
</html>

4、在Controller中接收这个文件

1、注意:MultipartFile类型的接收必须在前面加上@RequestParam并注上接收过来的标签的name,没有会报错

 @RequestMapping(value = "/file.do",method = RequestMethod.POST)
    public String file(@RequestParam("file")MultipartFile file){
        System.out.println("fileName:"+file.getOriginalFilename());
        String fileName = UUID.randomUUID().toString()+file.getOriginalFilename();
        String savePath = "/Volumes/macOS/虚拟OS/兴唐/OutFile/";
        saveFile(file,savePath,fileName);
        return "/result";
    }

接收到这个文件后,通过UUID给文件加上一个唯一的文件名,然后将文件保存到本地,注意,保存路径最后要加一个’/‘

 public int saveFile(MultipartFile file,String savePath,String fileName)
    {
        try {
            OutputStream outputStream = new FileOutputStream(savePath+fileName);
            IOUtils.copy(file.getInputStream(),outputStream);
            IOUtils.closeQuietly(outputStream);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return 0;
    }

注意,保存的过程中借助了IOUtils,其参数为输入流和输出流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值