今天我们要说的这个话题很简单,不要问为啥,因为SpringBoot,哈哈。现在SpringBoot可以说人人都会用了,它的好处是显而易见的,大大的简化了配置,一起来看看吧。
我们分以下3种情况来谈这个话题。
第一种:上传单个文件
先来看一下form表单的设置,如下图所示:
单个文件的form
form表单要满足以下3点才行:
form表单的method属性的值是POSTform表单的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还是很实用的。
今天的内容就到这里了,小伙伴们有什么疑问可以在评论区留言哦。