Spring专题

SpringBoot中如何使用SpringMVC上传文件?

2019-11-18  本文已影响0人  自律赢

今天我们要说的这个话题很简单,不要问为啥,因为SpringBoot,哈哈。现在SpringBoot可以说人人都会用了,它的好处是显而易见的,大大的简化了配置,一起来看看吧。

我们分以下3种情况来谈这个话题。

第一种:上传单个文件

先来看一下form表单的设置,如下图所示:

单个文件的form

form表单要满足以下3点才行:

form表单的method属性的值是POST

form表单的enctype属性的值是multipart/form-data

上传文件的input的类型要是file

SpringMVC的设置如下:

SpringMVC接收单个文件

从图中可以看出服务端的写法非常简单,直接写Controller就行了。简单地说明一下,processUpload方法的参数要用MultipartFile接口来接收,这样SpringMVC才能接收到文件类型的输入项,之所以这么简单主要是因为SpringBoot已经为我们做好了所有的准备工作。当然了@RequestParam注解也可以换成@RequestPart,如图:

@RequestPart

我们这个这里返回了"redirect:/",用于重定向到根路径。

那么接下来我们就来看一下怎么上传多个文件。

第二种:不同的name上传多个文件

这种是由上传单一文件引申出来的,其实就是form表单上传多个数据项,只不过有多个file类型的input。这些多个不同的input通过name进行区分。如下图的3个input的name分别是file1、file2、file3:

多个不同的name

SpringMVC端就用多个参数来接收,很简单的,如下图:

接收多个file

这种场景属于上传多个图片,还不是通常意义上的批量上传,一个name代表一个种类,每个种类下含有一张图片。

第三种:同一个name上传多个文件

这种方式是把表单中的file类型的input设置成同一个name,这样SpringMVC就会把它们当做数组或列表来对待,form表单的写法如下,它们的name都是files:

同一个name

SpringMVC端使用MultipartFile列表来接收文件如下图,其中txt用于接收表单中的一个输入框:

List接收文件

如果换成数组接收的话就如同下图所示:

数组接收文件

这种场景才属于真正意义上的批量上传,比如同一个主题下的多个图片。

MultipartFile接口提供的方法

我们现在看一下MultipartFile接口的一些方法,理解这些方法对于编程还是很有好处的,可以快速提高我们的开发效率。

String getName();

获取参数在表单中的名称

String getOriginalFilename();

获取文件的原始名称,比如你上传的是apple.jpeg,那么这个方法返回的就是apple.jpeg。

String getContentType();

返回http请求的ContentType

boolean isEmpty();

判断上传的文件是否为空

long getSize();

返回文件的字节数形式的大小

byte[] getBytes();

返回文件的字节数组

InputStream getInputStream();

返回一个代表该文件的输入流,通常用于关闭流

void transferTo(File dest);

把接收到的文件写入到目的文件中,如果目的文件已经存在了则会先进行删除。用法如下:

file.transferTo(new File("/Users/i/apple.jpeg"));

void transferTo(Path dest)

作用同void transferTo(File dest);

总结

好了,今天的内容就这些了,主要和大家分享了基于SpringBoot的上传文件的方式,包括上传单个文件,上传多个不同name的文件和上传多个相同name的文件。另外还介绍了MultipartFile接口的常用功能。其中transferTo还是很实用的。

今天的内容就到这里了,小伙伴们有什么疑问可以在评论区留言哦。

上一篇下一篇

猜你喜欢

热点阅读