java中MultipartFile和File最简单的互相转换示例

 更新时间:2023年09月25日 11:53:50   作者:买火车的小男孩  
这篇文章主要给大家介绍了关于java中MultipartFile和File最简单的互相转换的相关资料,MultipartFile和File都是Java中用于处理文件上传的类,MultipartFile用于处理上传的文件,File用于处理本地磁盘上的文件,需要的朋友可以参考下

MultipartFile和File 的区别

MuitipartFile 是 Spring 框架中用来处理文件上传的接口,它封装了文件上传的信息,比如文件名、文件类型等。

File 是Java 标准库中提供的文件操作类,用于描述文件信息,比如文件路径、文件大小等

总的来说,MultipantFile 是用来处理文件上传的,而 File 则是用来描述文件信息的。

MultipartFile 与 File 的 互相转换

1. MultipartFile 转 File

最常见的方式(通过文件流写入):

public File multipartFile2File (MultipartFile multipartFile) {
    // 创建临时文件
    String path = "export/demo.xlsx";
    File file = new File(path);
    InputStream inputStream = null;
    FileOutputStream outputStream = null;
    try {
        // 获取文件输入流
        inputStream = multipartFile.getInputStream();
        if (!file.exists()) {
            file.createNewFile();
        }
        // 创建输出流
        outputStream = new FileOutputStream(file);
        byte[] bytes = new byte[1024];
        int len;
        // 写入到创建的临时文件
        while ((len = inputStream.read(bytes)) > 0) {
            outputStream.write(bytes, 0, len);
        }
    } catch (Exception e) {
        throw new RuntimeException(e);
    } finally {
        // 关流
        try {
            if (outputStream != null) {
                outputStream.close();
            }
            if (outputStream != null) {
                inputStream.close();
            }
            outputStream.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    return file;
}

最简单的方式:

使用Spring中的FileCpopyUtils类的copy()方法将MultipartFile 转换为File类型

public File multipartFile2File (MultipartFile multipartFile) {
    String path = "export/demo.xlsx";
    File file = new File(path);
    try {
        if (!file.exists()) {
            file.createNewFile();
        }
        // 底层也是通过io流写入文件file
        FileCopyUtils.copy(multipartFile.getBytes(), file);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    return file;
}

2. File 转 MultipartFile

使用org.springframework.mock.web.MockMultipartFile 需要导入spring-test.jar

public MultipartFile file2MultipartFile () {
    String path = "export/demo.xlsx";
    File file = new File(path);
    MultipartFile multipartFile;
    try {
        FileInputStream fileInputStream = new FileInputStream(file);
        multipartFile = new MockMultipartFile("copy"+file.getName(),file.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(),fileInputStream);
        System.out.println(multipartFile.getName()); // 输出demo.xlsx
        fileInputStream.close();
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    return multipartFile;
}

 使用CommonsMultipartFile

public MultipartFile file2MultipartFile () {
    String path = "export/demo.xlsx";
    File file = new File(path);
    MultipartFile multipartFile;
    try {
        DiskFileItem fileItem2 = (DiskFileItem) new DiskFileItemFactory().createItem("file", ContentType.MULTIPART.getValue(), true, file.getName());
        //也可以用IOUtils.copy(inputStream,os);
        Files.copy(Paths.get(file.getAbsolutePath()), fileItem2.getOutputStream());
        multipartFile = new CommonsMultipartFile(fileItem2);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    return multipartFile;
}

总结 

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

相关文章

  • 解决rocketmq-client查询手动发送消息异常问题

    解决rocketmq-client查询手动发送消息异常问题

    这篇文章主要介绍了解决rocketmq-client查询手动发送消息异常问题,具有很好的参考价值,希望对大家大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Java经典面试题汇总:多线程

    Java经典面试题汇总:多线程

    本篇总结的是Java多线程相关的面试题,后续会持续更新,希望我的分享可以帮助到正在备战面试的实习生或者已经工作的同行,如果发现错误还望大家多多包涵,不吝赐教,谢谢
    2021-07-07
  • Mybatis批量插入Oracle数据的方法实例

    Mybatis批量插入Oracle数据的方法实例

    在开发中或多或少都会遇到数据批量插入的功能,最近我在做项目的过程中就遇到了这样一个问题,下面这篇文章主要给大家介绍了关于Mybatis批量插入Oracle数据的相关资料,需要的朋友可以参考下
    2022-01-01
  • Java发送http请求的示例(get与post方法请求)

    Java发送http请求的示例(get与post方法请求)

    这篇文章主要介绍了Java发送http请求的示例(get与post方法请求),帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2021-01-01
  • Apache Commons CLI构建命令行应用利器教程

    Apache Commons CLI构建命令行应用利器教程

    这篇文章主要为大家介绍了构建命令行应用利器Apache Commons CLI的使用教程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • spring boot前后端交互之数据格式转换问题

    spring boot前后端交互之数据格式转换问题

    这篇文章主要介绍了spring boot前后端交互之数据格式转换,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • mybatis返回list<Integer>时resultType写Integer问题

    mybatis返回list<Integer>时resultType写Integer问题

    这篇文章主要介绍了mybatis返回list<Integer>时resultType写Integer问题,具有很好的参考价值,希望对大家有所帮助,
    2023-12-12
  • SpringCloud网关Gateway架构解析

    SpringCloud网关Gateway架构解析

    这篇文章主要介绍了SpringCloud网关Gateway架构解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java为图片添加水印并保存实现方法(附带源码)

    Java为图片添加水印并保存实现方法(附带源码)

    这篇文章主要介绍了如何使用Java编程语言在图像上添加文字或图片水印,并提供了一个简单的Java程序实现,文中给出了详细的代码示例,需要的朋友可以参考下
    2025-03-03
  • java多线程实现取款小程序

    java多线程实现取款小程序

    这篇文章主要为大家详细介绍了java多线程实现取款小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05

最新评论