java中File转为MultipartFile的四种方式_file转multipartfile-程序员宅基地

技术标签: java  java开发常遇问题  后端  开发语言  

java中File转为MultipartFile的四种方式

问题背景

项目中需要调用别人的接口上传一个文件,别人的接口参数为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);
        }

        return new CommonsMultipartFile(item);
    }

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

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

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);
    }

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

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

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;
    }
File file = new File("D:\\a.txt");
FileItem fileItem = createFileItem(file.getPath(),file.getName());
MultipartFile cMultiFile = new CommonsMultipartFile(fileItem);

4 方法4,添加依赖

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
</dependency>
import org.springframework.mock.web.MockMultipartFile;

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

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

MediaType.MULTIPART_FORM_DATA_VALUE

更改为

MediaType.TEXT_PLAIN_VALUE

总结

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




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

Lyric:痛快一起

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cucgyfjklx/article/details/123133555

智能推荐

proe3.0安装教程_proe 3.0 m210安装教程-程序员宅基地

文章浏览阅读1.8k次。安装前先关闭杀毒软件和360卫士,注意安装路径不能有中文,安装包路径也不要有中文。[安装环境]:Win7/Win8/Win101.在桌面上找到“计算机”鼠标右击选择“属性”。2.点击“高级系统设置”。3.点击“环境变量”。4.点击“新建”。5.在“新建用户变量”中分别输入变量名“lang”和变量值“chs”后,点击确定。6.点击确定。7.点击确定。8.鼠标右击软件压缩包,选择解压到“Proe3.0_x64”。9.双击打开“Proe3.0_x64”。10.在文件夹中找到_proe 3.0 m210安装教程

STM32 硬件I2C EEPROM命令解析_i2c_ee_bytewrite(-程序员宅基地

文章浏览阅读3.7k次。STM32 硬件I2C EEPROM命令解析转载▼ 转载自互联网void I2C_EE_BufferWrite(u8* pBuffer, u8 WriteAddr, u16 NumByteToWrite){ u8 NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0_i2c_ee_bytewrite(

MathType一章内公式编号不一致解决办法_mathtype公式与序号对不齐-程序员宅基地

文章浏览阅读8.7k次,点赞7次,收藏8次。问题写论文用MathType倒腾公式的时候常常碰到公式编号对不齐的问题,如下图所示:都是在第二章中,开头公式2.1-2.5都是正常的解决方法点击MathType-章节,如图:点击下一个,找到类似的多余的章节标识删除即可:..._mathtype公式与序号对不齐

python的generator、iterator、iterable_python gnerator 和iterable-程序员宅基地

文章浏览阅读105次。##python的高级特性----迭代器 参考:python的高级特性----迭代器 迭代器主要就是节省内存。在python中可以直接作用于for循环的数据类型有以下几种:(1)集合类型的数据:list, tuple, dict, set,str(2)generator: 包括生成器和 带yield 的 generator function上述对象可以直接作用于for循环,统称为可迭代对象:iterable,我们可以通过isinstance() 判断一个对象是否是Iterable对象:i_python gnerator 和iterable

微信小程序关联企业微信的自建应用后,静默登录_企业微信静默登录-程序员宅基地

文章浏览阅读1.3k次。首先,通过wx.qy.login获取到code,然后把这个code发送给我们自己写的接口api.getCompanyId,去请求到企业微信的id wx.qy.login({ success(res) { console.log("企业微信登录"); console.log(res); if (res.code && res.code != 6000) { // 通过this.setData方法,将上方d_企业微信静默登录

收集到的 hls rtmp rtsp 视频流测试地址_公开的hlsl监控地址-程序员宅基地

文章浏览阅读2.8w次。收集到的 hls rtmp rtsp 视频流测试地址hlshttps://video-dev.github.io/streams/x36xhzz/x36xhzz.m3u8http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8rtmprtmp://live.hkstv.hk.lxdns.com/live/hksrt..._公开的hlsl监控地址

随便推点

centos java1.8_CentOS8安装jdk1.8-程序员宅基地

文章浏览阅读257次。安装方法CentOS8上使用 yum 直接安装,环境变量自动配置好查看是否已安装看到下面结果,说明已经安装配置 jdk[root@xxx ~]# java -versionopenjdk version "1.8.0_222"OpenJDK Runtime Environment (build 1.8.0_222-b10)OpenJDK 64-Bit Server VM (build 25.222..._java-1.8.0-openjdk-headless(aarch-64) = 1:1.8.0.242.b08-1.h5.ky10 被 java-1.

从头开始搭建kubernetes集群+istio服务网格(1)—— 前期准备、安装docker、kubernetes_kubernetes docker 18.09.8-程序员宅基地

文章浏览阅读1.4k次。(win10 + virtualbox6.0 + centos7.6.1810 + docker18.09.8 + kubernetes1.15.1 + istio1.2.3)本系列分为三章,第一章是创建虚拟机、docker、kubernetes等一些基础设施;第二章是在此基础上创建一个三节点的kubernetes集群;第三章是再在之上搭建istio服务网格。本文参考了大量其他优秀作者的创作(已经在开头列出),自己从零开始,慢慢搭建了istio服务网格,每一步都在文章中详细地列出了。_kubernetes docker 18.09.8

google app engine 实现的网络硬盘,支持外链、权限管理和批量上传_google硬盘外链-程序员宅基地

文章浏览阅读626次。picasa被封之后一直找不到合适的地方放相册,后来看到了google app engine。 用GAE开发了一个简单的网络硬盘,支持外链、权限设置和多文件批量上传功能。 权限设置部分通过设置目录属性实现,设为私有则只有APP的管理员登录后才可见,也可设是否对访问者列出目录内容。 多文件批量上传功能通过flex实现的,客户端需要flash player 10以上,上传失败会自动重试。测试中遇到个别文件上传总是失败,原因还未知_google硬盘外链

matlab进行m k检验,用Matlab进行MK检验.doc-程序员宅基地

文章浏览阅读3.1k次。用Matlab进行MK检验用Matlab进行Mann-Kendall分析一、M-K趋势分析法与M-K突变检验的原理介绍1、Mann-Kendall趋势分析法非参数检验,又称任意分布检验,它不对变量的分布做严格假定,检验不针对特定的参数,而是模糊地对变量分布的中心位置或分布状态做检验,由于其不对总体分布做严格假定,因而适用性强[12]。因此,本文采用非参数的Mann-Kendall检验法对昌马河流域..._matlab mk 趋势检测结果

windows开机自启bat_servers 2016 设置开机启动.bat程序-程序员宅基地

文章浏览阅读6.3k次。windows 开机自动运行bat,bat文件放到“启动”目录即可。具体步骤:(1)打开C盘,依次按下图,查看->隐藏文件项目打勾->打开文件夹ProgrameData。或者直接粘贴访问C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp(2)拷贝bat到该启动目录下。————————————————版权声明:本文为CSDN博主「木易GIS」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声_servers 2016 设置开机启动.bat程序

【收藏】计算机专业常用学习网站_计算机学习网站-程序员宅基地

文章浏览阅读9.8k次,点赞27次,收藏174次。计算机专业常用的网站_计算机学习网站

推荐文章

热门文章

相关标签