Spring基础篇:文件的上传

123 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第30天,点击查看活动详情

关于文件的上传,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就能做很多事啦,通常有两个操作:

  1. 将文件直接保存到数据库中(图片)。(数据库操作)
  2. 将文件保存至本地。(I/O流操作)

上面两个操作先略过,后面单独说,这里先再了解一下multipartFile还能做什么。

// 获取原始文件名
String originalFilename = multipartFile.getOriginalFilename();
// 获取文件扩展名
String ext = originalFilename.substring(originalFilename.lastIndexOf("."));

这个操作当然是保存文件到本地时会用到的了。

PostMan测试

  1. 还是请求头,记得!

image.png

  1. body中,选择form-data,将key选为file,这样就能上传文件了。

image.png

常见问题

注意发送的参数名字和接收的形参的名字是否一样

image.png

不一样时可能出现错误,这时候可以使用@RequestParam;或者两个名字一样就行咯。