【Java】如何将File转换成MultipartFile

        假如你把你的后端项目部署在服务器上的时候,然后你要去读取某个路径下的文件,然后你就要提供文件的路径,然后获取到该文件对象,但是你需要将当前文件对象File转换成MultipartFile再发送http请求传递到其他服务器上,这样如何实现呢?

        后端如何发送http请求请参考:【Java】Java发送httpPost,httpGet,httpDelete请求-CSDN博客

代码实现:

import org.springframework.web.multipart.MultipartFile;
import java.io.*;public class FileToMultipartFile implements MultipartFile {private final File file;public FileToMultipartFile(File file) {this.file = file;}@Overridepublic String getName() {return file.getName();}@Overridepublic String getOriginalFilename() {return file.getName();}@Overridepublic String getContentType() {return "application/octet-stream";}@Overridepublic boolean isEmpty() {return file.length() == 0;}@Overridepublic long getSize() {return file.length();}@Overridepublic byte[] getBytes() throws IOException {InputStream is = new FileInputStream(file);ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len;while ((len = is.read(buffer)) != -1) {baos.write(buffer, 0, len);}return baos.toByteArray();}@Overridepublic InputStream getInputStream() throws IOException {return new FileInputStream(file);}@Overridepublic void transferTo(File dest) throws IOException, IllegalStateException {try (InputStream is = new FileInputStream(file);OutputStream os = new FileOutputStream(dest)) {byte[] buffer = new byte[1024];int len;while ((len = is.read(buffer)) != -1) {os.write(buffer, 0, len);}}}
}

单元测试:

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.mock.web.MockMultipartFile;public class FileToMultipartFileTest {private FileToMultipartFile fileToMultipartFile;@BeforeEachpublic void setUp() {// 在测试之前设置 FileToMultipartFile 实例// 假设存在一个名为 "xxx.png" 的文件File file = new File("static/images/xxx.png");fileToMultipartFile = new FileToMultipartFile(file);}@Testpublic void testGetName() {// 测试 getName 方法String name = fileToMultipartFile.getName();assertEquals("default_avatar.png", name);}@Testpublic void testGetOriginalFilename() {// 测试 getOriginalFilename 方法String originalFilename = fileToMultipartFile.getOriginalFilename();assertEquals("default_avatar.png", originalFilename);}@Testpublic void testGetContentType() {// 测试 getContentType 方法String contentType = fileToMultipartFile.getContentType();assertEquals("application/octet-stream", contentType);}@Testpublic void testIsEmpty() {// 测试 isEmpty 方法boolean isEmpty = fileToMultipartFile.isEmpty();assertTrue(!isEmpty); // 这里应该为 false}@Testpublic void testGetSize() {// 测试 getSize 方法long size = fileToMultipartFile.getSize();assertTrue(size > 0); // 文件大小应该大于 0}// 其它方法的测试可以类似地进行
}

如何你需要转换直接引入上面的FileToMultipartFile即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/103744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPIO子系统(三)

1,简述 GPIO 资源是相对来说较为简单,而且比较通用(比如 LED 灯),而 Linux 的 GPIO 驱动属于 Linux Driver 中较为容易上手的部分,但是简单归简单,在 Linux 系统中,要使用 GPIO 资源…

mysql.mongoDb,neo4j数据库对比

Mysql与MongoDb和Neo4j的一些对比 主要区别 MySQL: 1.MySQL是一种关系型数据库管理系统(RDBMS),广泛用于处理结构化数据。 2.它支持SQL语言,具备成熟的事务处理和数据一致性能力。 3.MySQL适用于大多数传统的基于表格…

UE4和C++ 开发-头文件(.h) 和实现文件(.cpp)区别

.h文件和.cpp文件是C程序中的两种不同类型的文件。 .h文件通常包含类、函数和变量的声明, 而.cpp文件包含这些声明的实现。 .h文件中的声明通常是公共的,可以被其他文件包含和使用。.cpp文件中的实现通常是私有的,只能在该文件中使用。 在…

高级网络调试技巧:使用Charles Proxy捕获和修改HTTP/HTTPS请求

今天我将与大家分享一种强大的网络调试技巧,那就是使用Charles Proxy来捕获和修改HTTP/HTTPS请求。如果您是一位开发人员或者网络调试爱好者,那么这个工具肯定对您有着很大的帮助。接下来,让我们一起来学习如何使用Charles Proxy进行高级网络…

区块链加密虚拟货币交易平台安全解决方案

区块链机密货币交易锁遭入侵,安全存在隐患。使用泰雷兹Protect server HSM加密机,多方位保护您的数据,并通过集中化管理,安全的存储密钥。 引文部分: 损失7000万美元!黑客入侵香港区块链加密货币交易所 2023年9月&…

计算机毕业设计选什么题目好?springboot 健身房管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

HTML5简介-HTML5 新增语义化标签-HTML5 新增多媒体标签

一、HTML5简介 HTML5,全称为HyperText Markup Language 5,是HTML的第五个版本,由万维网联盟(World Wide Web Consortium,W3C)和Web Hypertext Application Technology Working Group(WHATWG&am…

github创建个人网页登录后404无法显示的问题

1.首先必须要有内容,默认是会找index.html文件,找不到该文件会找readme.md文件,也就是说最简单的方法是,创建了与用户名同名的repository后username.github.io后,添加一个readme.md文件,得在readme里打点字…

十四、【图章工具组】

文章目录 仿制图章图案图章 仿制图章 纺织图和章工具跟我们之前所用到的修补工具类似,需要我们先按住Alt键选住一块区域,然后调整它的硬度在用我们选择的区域去覆盖,需要注意的是,我们去做的时候尽量一笔覆盖我们想要遮住的区域: 图案图章…

Blender:对模型着色

Blender:使用立方体制作动漫头像-CSDN博客 上一步已经做了一个头像模型,我做的太丑了,就以这个外星人头像为例 首先切换到着色器编辑器 依次搜索:纹理坐标、映射、分离xyz和颜色渐变 这里的功能也是非常丰富和强大&#xff0c…

【微服务部署】九、使用Docker Compose搭建高可用双机热备MySQL数据库

通常,一般业务我们使用云服务器提供的数据库,无论是MySQL数据库还是其他数据库,云服务厂商都提供了主备功能,我们不需要自己配置处理。而如果需要我们自己搭建数据库,那么考虑到数据的高可用性、故障恢复和扩展性&…

RFID拓展的相关问答

基于: Research Reading: Smart Parking Applications Using RFID Technology-CSDN博客这篇文章总结了无线射频识别(RFID)技术在自动化中的应用及其在停车场管理系统中的解决方案。文章提到,RFID技术在自动化中可以降低交易成本&…

【数据结构C/C++】双向链表的增删改查

文章目录 CC408考研各数据结构C/C代码(Continually updating) 对我个人而言,在开发过程中使用的比较多的就是双向链表了。 很多重要的代码优化都会使用到基于双向链表实现的数据机构。 比如我们常用的HashMap,我们知道Key其实是无…

Macos音乐制作:Ableton Live 11 Suite for Mac中文版

Ableton Live 11是一款数字音频工作站软件,用于音乐制作、录音、混音和现场演出。它由Ableton公司开发,是一款极其流行的音乐制作软件之一。 以下是Ableton Live 11的一些主要特点和功能: Comping功能:Live 11增加了Comping功能…

css设置文本溢出隐藏...

在CSS中,文本溢出可以使用text-overflow属性来处理,下面分别介绍单行文本溢出和多行文本溢出的处理方法1: 单行文本溢出。需要使用text-overflow: ellipsis;来显示省略号。需要注意的是,为了兼容部分浏览器,还需要设置…

深度思考线程池面经之四:使用线程池的各种特性

8 线程池(百度acg百度云一面) 8.1 你是用到哪个线程池呢,在哪个场景中使用呢 答:在秒杀系统中使用了newCachedThreadPool这个线程池 8.2 自定义线程池的参数,你是怎么设置的呢 8.3 写一个自定义线程池,…

Python接口自动化-requests模块之post请求

一、源码解析 def post(url, dataNone, jsonNone, **kwargs):r"""Sends a POST request.:param url: URL for the new :class:Request object.:param data: (optional) Dictionary, list of tuples, bytes, or file-likeobject to send in the body of the :cl…

Vue.prototype详解

一:简介 在 Vue.js 中,经常会看到 this.$XXX 这种写法,那么这个是什么呢?其实这里就是使用 Vue.prototype 所定义的一个挂载到本身的全局方法,主要是为了防止全局变量的污染,所以我们来共同商议的一种写法…

软件项目管理实践指南:有效规划、执行和控制

软件项目管理是使软件产品、应用程序和系统成功交付的重要规程。它有助于确保软件在预算内按时开发,同时满足客户的质量和功能需求。 软件项目管理是管理软件项目生命周期的一种有组织的方法,包括计划、开发、发布、维护和支持。它是在满足客户需求的同时…

RocketMQ为什么要保证订阅关系一致

这篇文章,笔者想聊聊 RocketMQ 最佳实践之一:保证订阅关系一致。 订阅关系一致指的是同一个消费者 Group ID 下所有 Consumer 实例所订阅的 Topic 、Tag 必须完全一致。 如果订阅关系不一致,消息消费的逻辑就会混乱,甚至导致消息丢…