SpringMVC系列之文件上传【springmvc整合commons-fileupload实现文件上传功能】

一、Maven依赖

  • commons-fileupload
<dependency>  
	<groupId>commons-fileupload</groupId>  
	<artifactId>commons-fileupload</artifactId>  
	<version>1.3.3</version> 
</dependency>

二、需要配置的Bean对象

  • multipartResolver
<!-- id的值必须是multipartResolver --> 
<bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
	<!-- 允许上传的文件大小:2MB 【1024*1024*2】-->  
	<property name="maxUploadSize" value="2097152" /> 
</bean>

三、前端文件上传时的参数要求

  • contentType(encType):multipart/form-data
  • http method:POST

请求消息体的编码类型必须是 multipart/form-data form表单默认的encType是application/x-www-form-urlencoded,所以使用form表单上传文件的时候,必须修改encType的值。如果没有使用form表单上传,那么在发送请求时,需要将contentType的值修改为 multipart/form-data

请求头类型必须是 POST 类型。form表单请求类型默认是GET类型,文件上传时需要修改成POST。如果没有使用form表单,那么请求发送的时候,将type/method修改成POST

看一下,示例代码:

<form th:action="@{/user/upload}" method="post" enctype="multipart/form-data">
    用户名: <input type="text" name="name" /> <br>
    年龄: <input type="text" name="age" /> <br>
    头像: <input type="file" name="file" /> <br>
    <input type="submit" value="添加用户">
</form>

四、后端Controller使用MultipartFile对象接收

SpringMVC底层,自动为我们完成传输文件的解析工作,并存放在MultipartFile对象中。如果是多个文件,那么Springmvc会自动将文件存放在MultipartFile[ ]数组对象中。通过调用对象,来获取其中的具体文件,直接来看代码。

@RequestMapping("/upload")
    public String addUser(MultipartFile file, User user) throws IOException {

        // 上传文件 - 图片服务器(分布式文件系统:FastDFS、GlusterFS【可在本地挂载路径】、MongoDB文件系统)
        // 存储到本地目录: d:/upload/
        // 在数据库中如何保存: 如果图片非常小,可转成 bytes64编码/二进制编码 存放到数据库中
        // 如果图片大,则存放路径。     /pics/文件名.后缀
        // 前端访问的时候:http://localhost:8080/springmvc-review-02/pics/文件名.后缀

        // 获取文件的原始名称
        String originalFilename = file.getOriginalFilename();

        // 获取后缀   没有 .
        String suffix = FilenameUtils.getExtension(originalFilename);

        // 重命名
        String prefix = UUID.randomUUID().toString().replaceAll("-", "");

        // 新文件名称
        String newFilename = prefix + "." + suffix;
        File destFile = new File("D:/upload/" + newFilename);
        file.transferTo(destFile);

        user.setPic("/pics/" + newFilename);

        userService.savaUser(user);

        return "redirect:/user/toAdd";
    }
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值