时间:2024-03-29
在Java中处理文件向来是一种不是很方便的操作,然后随着Spring框架的崛起,使用Spring框架中的MultipartFile来处理文件也是件很方便的事了,今天就为大家带来剖析MultipartFile的神秘面纱。MultipartFile本身并没有很复杂的结构,也正是他强力封装了很多便捷的api才引来很多人的使用。
MultipartFile为org.springframework.web.mutipart包下的一个类,MultipartFile翻译成中文来讲就是“多组件的文档”,不用太在乎他的中文含义,一般来讲使用MultipartFile这个类主要是来实现以表单的形式进行文件上传功能。
1、一种可以接收使用多种请求方式来进行上传文件的代表形式。
2、这个文件内容可以存储到内存中或者存储在磁盘的临时位置上【springboot 内置tomcat 默认储存位置设置:server.tomcat.basedir】
首先MultipartFile是一个接口,并继承自InputStreamSource,且在InputStreamSource接口中封装了getInputStream方法,该方法的返回类型为InputStream类型,这也就是为什么MultipartFile文件可以转换为输入流。
通过以下代码即可将MultipartFile格式的文件转换为输入流。
1、 getName() :获取的是前后端约定的传入文件的参数的名称,在SpringBoot后台中则是通过@RequestParam(value="file",required =false)MultipartFile testFileName,注解定义的内容。
这里值得注意的是name值必须存在,否则无法获取文件
@RequestMapping("/uploadFile")
public ResponseParams uploadFile(
@RequestParam(value="file",required =false)MultipartFile testFileName,
HttpServletRequest request,
HttpServletResponse response) {
return xx;
2、 getOriginalFileName() :获取的是文件的完整名称,包括文件名称+文件拓展名。
3、 getContentType() :获取的是文件的类型,注意是文件的类型,不是文件的拓展名。
4、 isEmpty() :判断传入的文件是否为空,如果为空则表示没有传入任何文件。
5、 getSize() :获取文件的大小,单位是字节。
6、 getBytes() :将文件转换成一种字节数组的方式进行传输,会抛出IOException异常。
7、 getInputStream() :将文件转换成输入流的形式来传输文件,会抛出IOException异常。
8、 transferTo() :可以用来转化为file文件
测试:模拟一个junit上传案例,这里在本地创建一个文件然后转化成MultipartFile
try {
input = new FileInputStream(file);
MultipartFile multipartFile = new MockMultipartFile("file",
file.getName(), "text/plain", input);
fileService.doUploadFile(multipartFile, "xx");
} catch (Exception e) {
e.printStackTrace();
System.out.println("getBytes::"+file.getBytes().toString());
System.out.println("getInputStream::"+file.getInputStream());
System.out.println("getOriginalFileName::"+file.getOriginalFilename());
System.out.println("getContentType::"+file.getContentType());
System.out.println("isEmpty::"+file.isEmpty());
System.out.println("getSize::"+file.getSize());
//输出值
getName::file //文件参数名称
getBytes::[B@6df31abf//字节数,这里打印出地址
getInputStream::java.io.ByteArrayInputStream@5a57cf90//输入流,这里打印出地址
getOriginalFileName::test.txt//文件全称,包括扩展名
getContentType::text/plain//contentType
isEmpty::false//文件是否为空
getSize::2//内容长度
@RequestParam(value="file",required =false)MultipartFile[] testFileName,