java后台本地文件转为MultipartFile类型的实现方式

 更新时间:2025年02月13日 09:35:20   作者:探索途中的码农  
在Java后台将本地文件转换为MultipartFile类型,可以通过使用FileItemFactory创建FileItem,然后使用CommonsMultipartFile类构造一个MultipartFile对象,将本地文件流转换为MultipartFile,getMultipartFiles()和getMultipartFiles()方法

java后台本地文件转为MultipartFile类型

前端上传文件转为MultipartFile类型,java后台通过springmvc接收自动转换处理就不用多说了。

现在需要在后台java代码里将本地文件转换为MultipartFile类型如何处理呢?

如下代码

主要利用FileItemFactory创建FileItem,MultipartFile的实现类CommonsMultipartFile构造一个对象,将本地读取的文件流转换为MultipartFile。

getMultipartFiles()和getMultipartFiles()支持一个文件的转换和多个文件的转换。

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
import java.io.*;
 
public class MultipartFileTest {
 
    private static final Logger log = LoggerFactory.getLogger(MultipartFileTest.class);
 
    private MultipartFileTest() { }
 
 
    public static void main(String[] args) {
        // 本地文件转为MultipartFile类型
        try{
            InputStream fis = new FileInputStream("E:\\tool\\20230102word.doc");
            MultipartFileTest.getMultipartFile(fis, "20230102word.doc");
        }catch (FileNotFoundException e){
            log.error("FileNotFoundException exception", e);
            throw new RuntimeException("文件不存在");
        }
    }
 
    public static MultipartFile getMultipartFile(InputStream inputStream, String fileName) {
        FileItem fileItem = createFileItem(inputStream, fileName);
        return new CommonsMultipartFile(fileItem);
    }
 
 
    public static MultipartFile[] getMultipartFiles(InputStream[] inputStream, String fileName) {
        // 多文件转换
        int length = inputStream.length;
        MultipartFile[] multipartFiles = new MultipartFile[length];
        for (int i = 0; i < length; i++) {
            FileItem fileItem = createFileItem(inputStream[i], fileName);
            multipartFiles[i] = new CommonsMultipartFile(fileItem);
        }
        return multipartFiles;
    }
 
 
    public static FileItem createFileItem(InputStream inputStream, String fileName) {
        FileItemFactory factory = new DiskFileItemFactory(16, null);
        FileItem fileItem = factory.createItem("file", MediaType.MULTIPART_FORM_DATA_VALUE, true, fileName);
        int read = 0;
        OutputStream os = null;
        byte[] buffer = new byte[10 * 1024 * 1024];
        try {
            os = fileItem.getOutputStream();
            while ((read = inputStream.read(buffer, 0, 4096)) != -1) {
                os.write(buffer, 0, read);
            }
            inputStream.close();
        } catch (IOException e) {
            log.error("os write exception", e);
            throw new IllegalArgumentException("文件流输出失败");
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    log.error("stream os close exception", e);
                }
            }
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    log.error("stream inputStream close exception", e);
                }
            }
        }
        return fileItem;
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot与MyBatis配置与操作实战指南

    Spring Boot与MyBatis配置与操作实战指南

    本文介绍了如何在SpringBoot项目中配置和使用MyBatis,包括环境准备、数据源配置、MyBatis配置、数据操作、事务管理以及高级配置如缓存和插件的使用,通过这些步骤,可以实现高效的数据驱动应用程序开发,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • Java实现银行ATM系统

    Java实现银行ATM系统

    这篇文章主要为大家详细介绍了Java实现银行ATM系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • Java并发编程创建并运行线程的方法对比

    Java并发编程创建并运行线程的方法对比

    这篇文章主要为大家详细介绍了Java并发编程创建并运行线程的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 修改idea的这些启动参数,令你的idea健步如飞

    修改idea的这些启动参数,令你的idea健步如飞

    这篇文章主要介绍了修改idea的这些启动参数,令你的idea健步如飞~具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Spring security权限配置与使用大全

    Spring security权限配置与使用大全

    Spring Security 本质上是借助一系列的 Servlet Filter来提供各种安全性功能,但这并不需要我们手动去添加或者创建多个Filter,本文重点给大家介绍spring-security的配置与使用及实现方式,感兴趣的朋友一起看看吧
    2021-09-09
  • SpringBoot整合OpenCV的实现示例

    SpringBoot整合OpenCV的实现示例

    这篇文章主要介绍了SpringBoot整合OpenCV的实现示例。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Spring数据库连接池url参数踩坑及解决

    Spring数据库连接池url参数踩坑及解决

    这篇文章主要介绍了Spring数据库连接池url参数踩坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Springboot  jar包 idea 远程调试的操作过程

    Springboot  jar包 idea 远程调试的操作过程

    文章介绍了如何在IntelliJ IDEA中远程调试Spring Boot项目的Jar包,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • IDEA导入外部项目报Error:java: 无效的目标发行版: 11的解决方法

    IDEA导入外部项目报Error:java: 无效的目标发行版: 11的解决方法

    这篇文章主要介绍了IDEA导入外部项目报Error:java: 无效的目标发行版: 11,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • 一文带你了解Java选择排序的原理与实现

    一文带你了解Java选择排序的原理与实现

    选择排序:(Selection sort)是一种简单直观的排序算法,也是一种不稳定的排序方法。本文主要为大家介绍一下选择排序的原理与实现,希望对大家有所帮助
    2022-11-11

最新评论