MultipartFile详解

1. 概述

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

2. 常用方法解析

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

2.1 getName方法

getName方法获取的是前后端约定的传入文件的参数的名称,在SpringBoot后台中则是通过@Param(“uploadFile”) 注解定义的内容。值得一提的是,我们来看一下该方法的注释,如下图2.1所示:
在这里插入图片描述

从上图的return中可以看出,返回的name值从来不是null或者空,也就是说如果使用MultipartFile来接收文件,那么@Param(“uploadFile”)定义的接收文件的名称则必不可少,这样才能接收到文件,如果没有定义@Param(“uploadFile”),则接收不到文件。

/**
 * 上传Excel文件
 * @param multipartFile
 * @return
 */
@PostMapping("/upload")
@CrossOrigin
public Result<?> upload(@RequestParam("file") MultipartFile multipartFile) {
 try {
    String upload = jkQuestionService.upload(multipartFile);
    return Result.ok(upload);
 }
 catch (Exception ex) {
    log.info(ex.getMessage(), ex);
    return Result.error("上传失败!");
 }
}

2.2 getOriginalFileName方法

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

2.3 getContentType方法

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

2.4 isEmpty方法

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

2.5 getSize方法

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

2.6 getBytes方法

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

2.7 getInputStream方法

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

@Test
public void testTT(MultipartFile file) throws IOException {
    InputStream inputStream = file.getInputStream();
}

2.8 transferTo方法

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

@PostMapping("/test")
public Object test(@RequestParam("file") MultipartFile file) throws IOException {
    //先判断是否为空
    if (file.isEmpty()) {
        return "返回提示文件为空";
    }
    //获取带后缀文件名称
    String filename = file.getOriginalFilename();
    //创建一个新文件用于写入
    File newFile = new File("/root/runjar/storage/" + filename);
    //直接写入文件
    file.transferTo(newFile);
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值