关于文件的上传,Spring提供了方便的操作方式,再次回顾一下吧。
依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
在配置类中配置 上传处理器
也就是要在IOC容器中加 做上传处理器的类org.springframework.web.multipart.commons.CommonsMultipartResolver
这里使用注解的方式。
但是有个注意点:
- id必须为
multipartResolver
@Bean("multipartResolver")
public CommonsMultipartResolver getCommonsMultipartResolver() {
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
// 限制上传文件的大小,单位是B
commonsMultipartResolver.setMaxUploadSize(2097152);
return commonsMultipartResolver;
}
setMaxUploadSize:用来限制上传文件的大小,单位是B
SpringMVC整合时,通常会有两个配置类(一种规范)。一个配置类是根配置类,负责除了控制器和视图外所有的Bean;另外一个是MVC配置类,负责MVC相关的所有Bean及配置。 这个文件上传作为一个普通的Bean,我认为是应该放在根配置类,为MVC服务。
前端请求头
multipart/form-data
含有文件及图片上传,请将表单或者请求头中加上这个请求头。
Controller方法
在Controller的方法参数中,我们使用MultipartFile
这个类的对象来接收上传的文件。
@PostMapping("/upload")
public void upload(MultipartFile multipartFile) {
System.out.println(multipartFile); // 打印一下
}
拿到这个multipartFile
就能做很多事啦,通常有两个操作:
- 将文件直接保存到数据库中(图片)。(数据库操作)
- 将文件保存至本地。(I/O流操作)
上面两个操作先略过,后面单独说,这里先再了解一下multipartFile
还能做什么。
// 获取原始文件名
String originalFilename = multipartFile.getOriginalFilename();
// 获取文件扩展名
String ext = originalFilename.substring(originalFilename.lastIndexOf("."));
这个操作当然是保存文件到本地时会用到的了。
PostMan测试
- 还是请求头,记得!
- 在
body
中,选择form-data
,将key
选为file
,这样就能上传文件了。
常见问题
注意发送的参数名字和接收的形参的名字是否一样
不一样时可能出现错误,这时候可以使用@RequestParam
;或者两个名字一样就行咯。