1.MultipartFile 概述
MultipartFile是SpringMVC提供简化文件流操作的接口,该接口实现类有如下几个

在不使用框架之前,都是使用原生的HttpServletRequest来接收上传的数据的,如下所示:

public String fileSave(HttpServletRequest request, HttpServletResponse response){MultipartHttpServletRequest msr = (MultipartHttpServletRequest) request;MultipartFile targetFile = msr.getFile("file");
}

此处附上处理文件的一般操作

// MultipartFile targetFile
// 文件写入路径 每次写文件的时候要保证 路径唯一 不会发生写入文件覆盖的问题
String fileName = targetFile.getOriginalFilename();
LOGGER.info("fileOnlineShowServiceImpl  ==> fileSave() fileName : {}", fileName);
// 临时将文件存放本地存储位置
String tempFilePath = downloadPath + File.separator + ToolsUtil.createUUID() + "_" + fileName;
// 将文件写入到本地 localPath
targetFile.transferTo(new File(tempFilePath));
LOGGER.info("fileOnlineShowServiceImpl ==> fileSave() tempFilePath : {}", tempFilePath);
// 将内存的文件上传阿里云OSS,并转换成图片,返回对应的信息
Map<String, String> fileInfoMaps = fileDealWithService.dealWithFileService(ComonConstant.DIGIT_LONG_ONE, tempFilePath, Boolean.TRUE);
// 将写入后的数据新增到数据记录表中
addNewRecorde(fileSaveReqDTO, fileInfoMaps , yhSystemUsers);

文件是以二进制流传递到后端的,然后需要我们自己转换为File类。使用MultipartFile接口中提供的实现方法,我们对文件处理的操作就会变得很便捷。MultipartFile接口方法如下:

package org.springframework.web.multipart;import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import org.springframework.core.io.InputStreamSource;
import org.springframework.core.io.Resource;
import org.springframework.lang.Nullable;
import org.springframework.util.FileCopyUtils;public interface MultipartFile extends InputStreamSource {//返回参数的名称String getName();// 获取源文件的名称@NullableString getOriginalFilename();// 返回文件的内容类型@NullableString getContentType();// 判断文件内容是否为空boolean isEmpty();// 返回文件大小 以字节为单位long getSize();// 将文件内容转化成一个byte[] 返回byte[] getBytes() throws IOException;// 返回输入的文件流InputStream getInputStream() throws IOException;default Resource getResource() {return new MultipartFileResource(this);}void transferTo(File var1) throws IOException, IllegalStateException;// 将MultipartFile 转换换成 File 写入到指定路径default void transferTo(Path dest) throws IOException, IllegalStateException {FileCopyUtils.copy(this.getInputStream(), Files.newOutputStream(dest));}
}

2.MultipartFile 转File
知悉了MultipartFile 后,我们知道MultipartFile 内部提供了MultipartFile 转File.

// 临时将文件存放本地存储位置
String tempFilePath = downloadPath + File.separator + ToolsUtil.createUUID() + "_" + fileName;
// 将文件写入到本地 downloadPath
targetFile.transferTo(new File(tempFilePath));

同时想必大家平时也经常做过类似的处理,常见的如下操作:

public void writeFileToLocal(MultipartFile targetFile) {//开始时间LocalDateTime startTime = LocalDateTime.now();BufferedInputStream bufferedReader = null;BufferedOutputStream bufferedWriter = null;try {bufferedReader = new BufferedInputStream(targetFile.getInputStream());bufferedWriter = new BufferedOutputStream(new FileOutputStream(downloadPath + File.separator +targetFile.getOriginalFilename()));int len=0;//字节缓冲区ByteBuffer buffer = ByteBuffer.allocate(1024);while ((len = bufferedReader.read(buffer.array())) != -1) {bufferedWriter.write(buffer.array(),0,len);bufferedWriter.flush();}LOGGER.info("writeFileToLocal ==> 耗时:" + Duration.between(startTime, LocalDateTime.now()).toMillis());} catch (Exception e) {LOGGER.info("writeFileToLocal 文件写入失败");}finally {if (null != bufferedReader) {try {bufferedReader.close();} catch (IOException e) {LOGGER.info("writeFileToLocal 文件写入失败");}}if (null != bufferedWriter) {try {bufferedWriter.close();} catch (IOException e) {LOGGER.info("writeFileToLocal 文件写入失败");}}}}

3.File 转 MultipartFile
概述中有讲到Spring提供了MultipartFile 接口四个实现类,我们只需将File对象传入到对应实现类的构造方法中,即可实现File 转 MultipartFile,此处提供一个案例如下所示:

File file = new File(filePath);  // 文件路径
FileInputStream input = new FileInputStream(file);
// File 转 MultipartFile
MultipartFile targetFiles = new MockMultipartFile("targetFiles",file.getName(),null,IOUtils.toByteArray(input));
String fileName = targetFiles.getOriginalFilename(); // 源文件名

我们经常会去对路径提取文件名,以及文件类型,下面贴出集中lang3提供的常用的方法
(1).substringAfter

// 切割文件路径 获取"_"后的文件名
String textType = "Af_yta_sder.pdf";
String subRet = StringUtils.substringAfter(textType, "_");
System.out.println("subRet  = " + subRet );

输出结果:

subRet  = yta_sder.pdf

(2).substringAfterLast

// 获取最后一个"."切割符后的字符串 往往用作获取文件类型
String textType = "Af_yta_sder.pdf";
String subRet = StringUtils.substringAfterLast(textType, ".");
System.out.println("subRet  = " + subRet );

输出结果:

subRet  = pdf

(3).substringBefore

// 获取"."切割符前的字符串 往往用作获取文件名
String textType = "Af_yta_sder.pdf";
String subRet = StringUtils.substringBefore(textType, ".");
System.out.println("subRet  = " + subRet );

输出结果:

subRet  = Af_yta_sder

(4).substringBeforeLast

// 获取最后一个切割符"_"前的字符串
String textType = "Af_yta_sder.pdf";
String subRet = StringUtils.substringBeforeLast(textType, "_");
System.out.println("subRet  = " + subRet );
subRet  = Af_yta

其他类似的方法大同小异,此处就不一一列举了.

File 与 MultipartFile概述相关推荐

  1. File和MultipartFile互转

    /*** MultipartFile 转 File** @param multipartFile* @throws Exception*/public static File MultipartFil ...

  2. File转MultipartFile格式

    File转MultipartFile格式 方法一:MultipartFile转成File需要借助org.springframework.mock.web.MockMultipartFile 使用方法为 ...

  3. Java 将File转换为MultipartFile类型

    首先转换时需要用到commons-fileupload-1.3.2.jar包,若项目中没有就先加入jar包,实现代码如下: 1.根据File创建FileItem import java.io.File ...

  4. file 转换MultipartFile

    因为工作中的业务需要,需要将file转换为Spring专有的MultipartFile. 过程 结论 过程 spring通过MultipartFile来实现文件上传,查看相关的源码后,会发现原理十分简 ...

  5. File 转 MultipartFile

    前言:很多朋友都喜欢用spring的MultipartFile传文件,不过也确实强大.但如果我们收到的是file该怎么办?我们这就来解决 直接来例子 moke的jar包地址: https://mvnr ...

  6. 【Java】File类简单概述

    file类(与系统无关的类,即任何系统都能使用): 文件和目录名的抽象表达形式file 文件: directory:文件夹/目录: path:路径 路径分隔符: windows分号 Linux 冒号 ...

  7. File转化为MultipartFile

    File 转 MultipartFile 引入以下依赖: <dependency><groupId>commons-fileupload</groupId>< ...

  8. File如何转换成MultipartFile

    MutipartFile是spring里面定义的接口,它封装了用户在上传图片时所包含的所有信息,但是有些时候我们要将file转换成MutipartFile,才能在保持原有代码逻辑的情况下方便代码的调整 ...

  9. MultipartFile和File互转

    MultipartFile和File互转 一.M转F 1.详细方法 /*** 将MultipartFile转换为File*** @param outFilePath 参数* @param multiF ...

  10. MultipartFile 转File的几种方式

    前言 一.MultipartFile转File 二.代码示例 1.第一种方式 2.第二种方式 3.第三种方式 总结 前言 最近写项目有个需求是上传Excel文件并读取Excel文件中的内容,项目采用的 ...

最新文章

  1. SQL 2005 删除带有默认值约束的列
  2. 在实践中我遇到stompjs, websocket和nginx的问题与总结
  3. 网页如何调用flash的方法
  4. java知识博客网站(一些配置和学习的记录)
  5. LVS--NAT模型配置
  6. twitter storm常用命令
  7. python计算长方体体积最简单代码_python处理DICOM并计算三维模型体积
  8. 算法导论 第十三章 红黑树(python)-1插入
  9. php5d,php挖洞基础知识篇以及防范方法
  10. 华为魔术2手机拆机图解_荣耀Magic2手机内部做工如何?荣耀Magic2手机拆机
  11. SIP协议栈基础笔记
  12. Python基础语法-04-生成器,迭代器
  13. linux ssd 4k对齐工具下载,4k对齐检测工具(as ssd benchmark)
  14. SE Block (Sequeze and Excitation)
  15. android手机不能发短信,解决安卓手机发送短信失败的方法
  16. 快速使用ros小乌龟教程——ROS初体验
  17. 布隆过滤器在HBase中的应用
  18. win7安不了python_win7下安装python失败问题
  19. Java POI 对Excel合并单元格的数据处理
  20. 千峰java 笔记整理_JAVA学习笔记系列:菜鸟Vue学习笔记(四)

热门文章

  1. CODEVS 3977 炉石传说——圣骑士的逆袭
  2. 五、构建deb软件安装包
  3. IBM笔记本电池保养细则
  4. Imagination发布开源项目:适配PowerVR IP的Vulkan驱动和编译器合入Mesa 3D 图形库
  5. 未来几年,谁能拯救手机拍照功能?
  6. 人体究竟需要多少蛋白质?摄入过量就是浪费钱
  7. 微信小程序获取用户信息,返回nickName是微信用户,返回了匿名的头像名称原因。
  8. 风能设备物流的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  9. Hive 中的时间加减暨间隔函数INTERVAL
  10. c盘python27文件夹可以删除嘛_C盘的哪些文件夹可以删