【java中File转为MultipartFile的四种方式】

文章介绍了在Java中将File对象转换为MultipartFile对象的四种方法,包括使用DiskFileItemFactory、直接创建DiskFileItem、创建FileItem以及使用Spring的MockMultipartFile。这些方法常用于处理需要上传至支持MultipartFile参数的接口的情况。
摘要由CSDN通过智能技术生成

问题背景

项目中需要调用别人的接口上传一个文件,别人的接口参数为MultipartFile类型,需要对File文件进行一个转换再进行上传

File转MultipartFile

1 方法一

public static MultipartFile getMultipartFile(File file) {
        FileItem item = new DiskFileItemFactory().createItem("file"
            , MediaType.MULTIPART_FORM_DATA_VALUE
            , true
            , file.getName());
        try (InputStream input = new FileInputStream(file);
            OutputStream os = item.getOutputStream()) {
            // 流转移
            IOUtils.copy(input, os);
        } catch (Exception e) {
            throw new IllegalArgumentException("Invalid file: " + e, e);
        }
    <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">CommonsMultipartFile</span><span class="token punctuation">(</span>item<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

可以设置为静态方法,也可以使用对象进行调用

File file = new File("D:\\a.txt");
MultipartFile cMultiFile = getMultipartFile(file);

 
 
  • 1
  • 2

2 方法二

// 第二种方式
public static MultipartFile getMultipartFile(File file) {
        DiskFileItem item = new DiskFileItem("file"
            , MediaType.MULTIPART_FORM_DATA_VALUE
            , true
            , file.getName()
            , (int)file.length()
            , file.getParentFile());
        try {
            OutputStream os = item.getOutputStream();
            os.write(FileUtils.readFileToByteArray(file));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new CommonsMultipartFile(item);
    }

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

可以设置为静态方法,也可以使用对象进行调用

File file = new File("D:\\a.txt");
MultipartFile cMultiFile = getMultipartFile(file);

 
 
  • 1
  • 2

3 方法三,创建FileItem

    public static FileItem createFileItem(String filePath, String fileName){
        String fieldName = "file";
        FileItemFactory factory = new DiskFileItemFactory(16, null);
        FileItem item = factory.createItem(fieldName, "text/plain", false,fileName);
        File newfile = new File(filePath);
        int bytesRead = 0;
        byte[] buffer = new byte[8192];
        try (FileInputStream fis = new FileInputStream(newfile);
            OutputStream os = item.getOutputStream()) {
            while ((bytesRead = fis.read(buffer, 0, 8192))!= -1)
            {
                os.write(buffer, 0, bytesRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return item;
    }

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
File file = new File("D:\\a.txt");
FileItem fileItem = createFileItem(file.getPath(),file.getName());
MultipartFile cMultiFile = new CommonsMultipartFile(fileItem);

 
 
  • 1
  • 2
  • 3

4 方法4,添加依赖

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
</dependency>

 
 
  • 1
  • 2
  • 3
  • 4
import org.springframework.mock.web.MockMultipartFile;

File file = new File(“D:\a.txt”);
MultipartFile cMultiFile = new MockMultipartFile(“file”, file.getName(), null, new FileInputStream(file));

  • 1
  • 2
  • 3
  • 4

5 如果传输有点问题可能传输的类型有点不同

MediaType.MULTIPART_FORM_DATA_VALUE

 
 
  • 1

更改为

MediaType.TEXT_PLAIN_VALUE

 
 
  • 1

总结

  • 方法有很多,自己选一种合适的




作为程序员第 76 篇文章,每次写一句歌词记录一下,看看人生有几首歌的时间,wahahaha …

Lyric:痛快一起

JavaFile换为MultipartFile可以使用不同的方法。其一个简单的方法是使用MockMultipartFile类。这个方法包括以下几个步骤: 1. 首先,导入所需的类和包,包括java.io.Filejava.io.FileInputStream、org.springframework.web.multipart.MultipartFile、org.springframework.mock.web.MockMultipartFile和org.apache.http.entity.ContentType。 2. 然后,创建一个File对象,指定要换的文件的路径。 3. 接下来,使用FileInputStream将文件换为文件输入流。 4. 然后,使用MockMultipartFile的构造函数将文件输入流换为MultipartFile对象,传递文件名、原始文件名、内容类型和文件输入流。 5. 最后,你就可以使用这个MultipartFile对象来进行相关操作了。 另外,还有一种方法是使用MultipartFile的其他实现类,比如MultipartFileDto,通过传递文件名、原始文件名、内容类型和文件输入流来创建MultipartFile对象。但需要注意的是,这种方法可能会遇到一些问题,比如在一些框架MultipartFile的实现类比较有限。 总结来说,可以使用MockMultipartFile类将File对象换为MultipartFile对象,在使用过程可以根据实际情况选择合适的方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [史上最完整JavaFile化为MultipartFile的方法(附阿里云腾讯云对象存储API对照)](https://blog.csdn.net/m0_37609579/article/details/100901358)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值