一、概述

MultipartFile为org.springframework.web.mutipart包下的一个类,也就是说如果想使用MultipartFile这个类就必须引入spring框架,换句话说,如果想在项目中使用MultipartFile这个类,那么项目必须要使用spring框架才可以,否则无法引入这个类。MultipartFile翻译成中文来讲就是“多组件(类型)的文件”,不用太在乎他的中文含义,一般来讲使用MultipartFile这个类主要是来实现以表单的形式进行文件上传功能。

二、对MultipartFile初步理解

1.MultipartFile一种可以接收使用多种请求方式来进行上传文件的代表形式。(如果使用spring框架来实现项目中的文件上传功能,则MultipartFile是最合适的选择,而这里提到的多种请求方式则可以通俗理解为以表单的形式提交)。

2.这个文件内容可以存储到内存中或者存储在磁盘的临时位置上。

3.无论发生哪种情况,用户都可以自由地拷贝文件内容到session存储中,或者以一种永久存储的形式进行存储。

4.这种临时性的存储在请求结束之后将会被清除掉。

三、MultipartFile常用方法解析

1、getInputStream()方法
    首先MultipartFile是一个接口,并继承自InputStreamSource,且在InputStreamSource接口中封装了getInputStream方法,该方法的返回类型为InputStream类型,这也就是为什么MultipartFile文件可以转换为输入流。通过以下代码即可将MultipartFile格式的文件转换为输入流。

2、getName方法
    getName方法获取的是前后端约定的传入文件的参数的名称,在SpringBoot后台中则是通过@Param(“uploadFile”) 注解定义的内容。返回的name值从来不是null或者空,也就是说如果使用MultipartFile来接收文件,那么@Param(“uploadFile”)定义的接收文件的名称则必不可少,这样才能接收到文件,如果没有定义@Param(“uploadFile”),则接收不到文件。

3、getOriginalFileName方法
    getOriginalFileName方法获取的是文件的完整名称,包括文件名称+文件拓展名。

4、getContentType方法
    getContentType方法获取的是文件的类型,注意是文件的类型,不是文件的拓展名。

5、isEmpty方法
    isEmpty方法用来判断传入的文件是否为空,如果为空则表示没有传入任何文件。

6、getSize方法
    getSize方法用来获取文件的大小,单位是字节。

7、getBytes方法
    getBytes方法用来将文件转换成一种字节数组的方式进行传输,会抛出IOException异常。

8、getInputStream方法
    getInputStream方法用来将文件转换成输入流的形式来传输文件,会抛出IOException异常。

9、transferTo方法

    transferTo方法用来将接收文件传输到给定目标路径,会抛出IOException、IllegalStateException异常。该方法在实际项目开发中使用较少。

10、MultipartFile常用方法获取数据打印结果    

    我们以上传一张图片文件为例,分别来看一下调用不同方法所获取到的数据,如下图2所示:

Java MultipartFile能作为对象属性吗 multipartfile类_java

四、MultipartFile的一些使用技巧

(1)我们在使用MultipartFile作为参数传递的时候,可以将MultipartFile声明为一个数组,这样就能支持多文件传输,如果只需要传输一个文件,则去掉数组就好了。

(2)可以根据MultipartFile的getSize方法来获取到传输文件的大小,这样就能限定传输过来的文件的大小了。

五、MultipartFile实操代码展示(文件上传oss对象存储)

public String uploadLaboratoryData(@RequestParam("file") MultipartFile file) throws ServiceException {

       //getOriginalFileName方法获取的是文件的完整名称,包括文件名称+文件拓展名
       
        String ext = FilenameUtils.getExtension(file.getOriginalFilename());
        String uuid = GeneratorUtil.genFileName();
    try {
    
    //storageBizService.upload()方法是阿里云oss存储对象方法的存储体封装层:上传文化后得到文件在阿里云oss上存储的路径
    
        String url = storageBizService.upload("la/" + uuid + "." + ext, file.getInputStream(), file.getSize(), 
    }catch (IOException | SQLException | ParseException e) {
        e.printStackTrace();
    }
    return url;
}