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

智能推荐

RandomAccessFile 读取和存储文件_randomaccessfile读取文件-程序员宅基地

文章浏览阅读375次。RandomAccessFile 读取和存储文件;java读取大文件_randomaccessfile读取文件

java实现时间格式转换(int整数类型的秒/毫秒---时分秒毫秒)_int 格式化为时分秒-程序员宅基地

文章浏览阅读2.8k次。当然,还可以指定自定义的格式转化显示。_int 格式化为时分秒

Spring事务和事务传播机制_spring事务机制-程序员宅基地

文章浏览阅读259次。Spring事务_spring事务机制

Matlab-拓扑图绘制_给定邻接矩阵绘制拓扑图的方法-程序员宅基地

文章浏览阅读1.2w次,点赞4次,收藏90次。Matlab-拓扑图绘制(1)效果图话不多说,先上效果图:这是8个节点的全连接拓扑,即任意两点之间均连接,但连接的权重不同,在图上主要呈现的是拓扑连接关系:全连接标记节点的名称:1, 2,…, 8标记连接权重:0.28125, 0.42188,…连接权重越大,连接线越粗连接线的线型设置:虚线代码clcclearvarsclose alltic%==== 构建邻接矩阵g ====%n = 8; % 节点个数g = ones(n) - _给定邻接矩阵绘制拓扑图的方法

CentOS7下载安装MySQL 8.0.33_mysql centos下载-程序员宅基地

文章浏览阅读3.4k次,点赞4次,收藏35次。MySql8.0 版本 和 5.0 的加密规则不一样,而现在的可视化工具只支持旧的加密方式。在CentOS中默认安装有MariaDB,是MySQL的一个分支,主要由开源社区维护。CentOS 7及以上版本已经不再使用MySQL数据库,而是使用MariaDB数据库。因此,需要先卸载自带的MariaDB,再安装MySQL。如果直接安装MySQL,会和MariaDB的文件冲突。_mysql centos下载

我的网工奋斗经历-程序员宅基地

文章浏览阅读77次。本文来自:[url]http://bbs.51cto.com/thread-2520-1-1.html[/url] 经过三个月的奋斗,终于等到了这一天“11.5”。带着一颗沉重的心到来考场,也许我是所有考生第一个来到考场。9点的考试,我7点多就来了考场,一直到考场外徘徊着。等了差不多一个小时,看到了监考老师带着试卷来了,考生也一个接一个地来到考场。心跳加快,也不是紧张,就是一..._一个网工的故事

随便推点

【算法】三、回溯法_算法策略 回溯法-程序员宅基地

文章浏览阅读978次,点赞2次,收藏10次。回溯法其实就是不断地试探,看前方的路是否可以走,如果不行就退回一步,再换一个办法。_算法策略 回溯法

忘记本地mysql密码修改方法(win10,mysql8.0)_window10清除本地mysql密码-程序员宅基地

文章浏览阅读309次。1.关闭mysql服务2.管理员打开命令提示符,输入mysqld --console --skip-grant-tables --shared-memory输入后回车,放在一旁。3.再新建一个cmd窗口(用管理员身份打开)—win键+R,输入mysql -uroot -p然后回车键(Enter),弹出输入密码,不理,再次回车键(Enter)4.依次输入以下操作先刷新一下权限表:flush privileges;然后我们改密码:输入ALTER USER 'root'@'localh_window10清除本地mysql密码

ZXCLOUD R5300 G3的服务器安装ESXI6.7镜像前篇-制作ESXI6.7定制版-程序员宅基地

文章浏览阅读684次。VMware vSphere Hypervisor (ESXi) Offline Bundle(脱机捆绑包)镜像。服务器安装版本与平时安装版本有所不同,由于服务器缺少阵列卡驱动,需将阵列卡驱动注入。注意:将镜像刻录到U盘时写入方式为USB-HDD+ V2或USB-ZIP+ V2。文件放入文件夹中,在文件夹中再创建一个文件夹,将。定制版镜像,阵列卡驱动完成注入!最新版(自己下载,以上所需文件。在“文件”选项中打开刚才生成的。下载自己去淘宝买一次性下载)文件,选中解除锁定,并应用。注意:下载镜像时需下载。_esxi6.7镜像

前端适配方案flexible.js-程序员宅基地

文章浏览阅读326次。flexible适配步骤_flexible.js

c语言单个字符输入问题_c语言输入字符-程序员宅基地

文章浏览阅读1.9k次,点赞6次,收藏5次。而在我们输入时,其实输入了两个数据,一个是‘A’,另一个是‘\n’,而scanf在遇到(空格,换行等)停止读取数据,而‘\n’就被下一次的scanf给读走了;但是如果是一次输入多个字符的情况,当我们在屏幕上输入一个字符时,不能像输入整型那样输入一个空格再输入下一个字符,这样会将空格当成一个字符赋给下一个变量,直接输入两个字符就行(情况1)① scanf正常运行时,返回值是它读取的变量的个数,如果输入错误或停止,会返回EOF,EOF的值为-1。整型的输入:格式符相邻,输入时中间可以加上空格或回车。_c语言输入字符

浪潮服务器U盘安装系统无法识别到电脑硬盘问题的解决_there is no sata device-程序员宅基地

文章浏览阅读2.6w次,点赞2次,收藏44次。浪潮服务器U盘安装系统无法识别到电脑硬盘问题的解决首先说明一下,我是开发人员,不是专业的运维。公司来了一台服务器要我给他装linux系统,我呢就按正常的U盘安装系统方法操作,结果在选择安装位置指定磁盘的时候,发现只有我插入的那张U盘别检测到,服务器有一张1T的硬盘却没有被检测到。于是找了很多方法都没用,最终在联系厂家,在他们专家的指导下成功的解决了这个问题。问题如下图解决步骤:服务器开机..._there is no sata device

推荐文章

热门文章

相关标签