首页 > 脚本专栏 > python > Java MultipartFile与File互转

Java中MultipartFile与File互转的实现

作者:周全全

本文主要介绍了Java中MultipartFile与File互转的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

需求是上传Excel文件并读取Excel文件中的内容,根据获取的数据执行完某些业务操作后再将一些数据写回到excel中。前台使用FormData表单的方式请求后台,后台接收类型是MultipartFile,放置文件过大时会造成内存溢出需要转换为File类型

MultipartFile转File

其实转换的本质都是要创建一个file的临时文件,然后通过各种实现方式将MultipartFile中的内容写入到file中

1.FileUtils.copyInputStreamToFile转换

package com.cxstar.file.util;
import org.apache.commons.io.FileUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
 * @author zhouquan
 * @description 测试MultipartFile与File互转
 * @date 2023-03-12 17:31
public class FileTestUtils {
     * MultipartFile转File
     * 项目根路径创建临时文件,转换得到File,再删除临时文件
     * @param multipartFile
     * @return
    public static File multiPartFileToFile(MultipartFile multipartFile) throws IOException {
        //获取文件名
        String originalFilename = multipartFile.getOriginalFilename();
        //获取默认定位到的当前用户目录("user.dir"),也就是当前应用的根路径
        String tempDir = System.getProperty("user.dir");
        //根目录下生成临时文件
        File file = new File(tempDir+File.separator+originalFilename);
        FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), file);
        return file;

此种方式的弊端就是需要在调用此方法后需要再手动删除,也就是要在业务代码中再掺杂删除的逻辑。

2.multipartFile.transferTo(tempFile);

* MultipartFile转File * 项目根路径创建缓冲区来实现这个转换 * @param multipartFile * @return public static File multiPartFileToFile2(MultipartFile multipartFile) throws IOException { //获取文件名 String originalFilename = multipartFile.getOriginalFilename(); //获取默认定位到的当前用户目录("user.dir"),也就是当前应用的根路径 String tempDir = System.getProperty("user.dir"); //获取文件名 String filename = StringUtils.substringBeforeLast(originalFilename, "."); //获取文件后缀 String fileExt = StringUtils.substringAfterLast(originalFilename, "."); //在项目根路径生成临时文件 File tempFile = File.createTempFile(filename, "." + fileExt, new File(tempDir)); multipartFile.transferTo(tempFile); //在jvm退出时执行删除此路径下的文件 tempFile.deleteOnExit(); return tempFile;

注意:
1.防止生成的临时文件,createTempFile()方法会在文件名后添加随机码
2.生成的文件不会立马删除,而是在jvm退出时执行删除此路径下的文件

3. (推荐)FileUtils.writeByteArrayToFile(file, multipartFile.getBytes());

package com.cxstar.file.util;
import org.apache.commons.io.FileUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
 * @author zhouquan
 * @description 测试MultipartFile与File互转
 * @date 2023-03-12 17:31
public class FileTestUtils {
     * MultipartFile 转 File
     * @param multipartFile
     * @throws Exception
    public static File multiPartFileToFile3(MultipartFile multipartFile) {
        File file = null;
        if (multipartFile.isEmpty()) {
            return null;
        try {
            //本质上还是在项目根路径创建文件
            file = new File(multipartFile.getOriginalFilename());
            //将MultipartFile的byte[]写入到file中
            FileUtils.writeByteArrayToFile(file, multipartFile.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        return file;

此种方式相较于第二种方式,文件名不会发生改变,当然还是要手动删除

File转MultipartFile

MultipartFile文件上传时,其实springmvc已经转为StandardMultipartFile子类型

org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile

MultipartFile是一个接口,因此转成MultipartFile格式需要转成实现MultipartFile接口的实现类即可

package com.cxstar.file.util;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileInputStream;
 * @author zhouquan
 * @description 测试MultipartFile与File互转
 * @date 2023-03-12 17:31
public class FileTestUtils {
    public static MultipartFile getMultipartFile(File file) throws Exception {
        MultipartFile multipartFile = new MockMultipartFile(file.getName(), new FileInputStream(file));
        return multipartFile;

 到此这篇关于Java中MultipartFile与File互转的实现的文章就介绍到这了,更多相关Java MultipartFile与File互转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • python数据可视化之初探 Seaborn
    python数据可视化之初探 Seaborn
    2023-07-07
  • 如何查看Python安装了哪些包
    如何查看Python安装了哪些包
    2023-07-07
  • 一文带你了解Python中Scikit-learn库的使用
    一文带你了解Python中Scikit-learn库的使用
    2023-07-07
  • python中@contextmanager装饰器的用法详解
    python中@contextmanager装饰器的用法详解
    2023-07-07
  • 关于python中@property的使用方法
    关于python中@property的使用方法
    2023-07-07
  • 使用python查找windows系统中所有程序的安装信息
    使用python查找windows系统中所有程序的安装信息
    2023-07-07
  • Python从入门到精通之条件语句和循环结构详解
    Python从入门到精通之条件语句和循环结构详解
    2023-07-07
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2023 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号