将 InputStream 流转成 MultipartFile

news2024/11/25 2:49:45

MultipartFile是一个接口, 有一个MockMultipartFile实现类,里面有构造方法可以直接将输入流转为MutipartFile对象:

MultipartFile File = new MockMultipartFile(filename, file.getName(), file.getContentType(), fileStream);

使用MockMultipartFile类, 项目需要导入org.springframework:spring-test:5.1.2.RELEASE依赖, 可能会存在不方便的地方. 另外一种还可以自定义一个类去实现MultipartFile接口, 然后将MockMultipartFile类中的内容复制过来就行了.  主要工作就是将输入流转换为byte数组的过程FileCopyUtils.copyToByteArray(contentStream)).    往里面查看就是输入流转为输出流, 然后输出流.toByteArray()的过程

  public HzMultipartFile(String name, @Nullable String originalFilename, @Nullable String contentType, @Nullable byte[] content) {
        Assert.hasLength(name, "Name must not be null");
        this.name = name;
        this.originalFilename = originalFilename != null ? originalFilename : "";
        this.contentType = contentType;
        this.content = content != null ? content : new byte[0];
    }

    public HzMultipartFile(String name, @Nullable String originalFilename, @Nullable String contentType, InputStream contentStream) throws IOException {
        this(name, originalFilename, contentType, FileCopyUtils.copyToByteArray(contentStream));
    }


 FileCopyUtils.class
 public static byte[] copyToByteArray(@Nullable InputStream in) throws IOException {
        if (in == null) {
            return new byte[0];
        } else {
            ByteArrayOutputStream out = new ByteArrayOutputStream(4096);
            copy((InputStream)in, (OutputStream)out);
            return out.toByteArray();
        }
    }



    StreamUtils.class
    public static int copy(InputStream in, OutputStream out) throws IOException {
        Assert.notNull(in, "No InputStream specified");
        Assert.notNull(out, "No OutputStream specified");
        int byteCount = 0;
        byte[] buffer = new byte[4096];

        int bytesRead;
        for(boolean var4 = true; (bytesRead = in.read(buffer)) != -1; byteCount += bytesRead) {
            out.write(buffer, 0, bytesRead);
        }

        out.flush();
        return byteCount;
    }

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

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

相关文章

maven配置问题

maven配置问题 Error running ‘项目名 [install]’: No valid Maven installation No valid Maven installation found. Either set the home directory in the configuration dialog or set the M2_HOME environment variable on your system. 解决方法: 依次检…

Echarts柱状图循环配色多色彩

话不多说,直接上配置案例,欢迎留言分享交流 option {xAxis: {type: category,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun,"y","q","y","u"]},yAxis: {type: value},series: [{itemStyle: {normal: {// barBorde…

华为OD机试真题 Python 实现【数组的中心位置】【2023Q1 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Python算法源码六、效果展示1、输入2、输出 一、题目描述 给你一个整数数组nums,请计算数组的中心位置,数组的中心位置是数组的一个下标,其左侧所有元素相乘的积等于右侧所有元素…

Fiddler 工具的使用

文章目录 01 Fiddler 工具介绍1. 下载与安装2. Fiddler 工具界面介绍3. Fiddler 工具的工作原理 02 手工调用 HTTP 接口1. 发送HTTP请求2. 查看返回数据包 03 获取 PC 端的网络数据包04 获取手机端的网络数据包05 截包与改包场景一:截断请求数据,然后篡改…

一键安装和卸载docker及docker-compose

代码: #!/bin/bashSYSTEMD_PATH/usr/lib/systemd/system/docker.service DOCKER_FILEdocker-20.10.23.tgz DOCKER_COMPOSE_FILEdocker-compose-plugin-2.15.1-3.el8.x86_64.rpm RED\E[1;31m GREEN\E[1;32m YELOW\E[1;33m SHAN\E[1;31;5m RES\E[0mfunction install_…

项目中期检查会议和进度对接

1.召开中期项目检查会议,与团队成员和博士王锟对接进度。对整体项目表示满意接受,指出重点需要修改提升和进一步开发完善的部分,以增强系统的完整度、功能亮点和界面数量点。具体为 ①注重“highlight”,即布局凸显主题功能&…

spring cloud 之 ribbon

Ribbon概念 Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端负载均衡的工具,主要功能是提供客户端负载均衡算法和服务调用。简单的说,就是在配置文件中列出 Load Balance( LB:将用户的请求平摊的分配到多个服务上&a…

JavaScript ES5中实现继承

1 对象和函数的原型 2 new、constructor 3 原型链的查找顺序 4 原型链实现的继承 5 借用构造函数继承 6 寄生组合实现继承 function 创建的名称如果开头是大写的,那这个创建的不是函数,是创建了类。 要注意区分!本章很多这样子的类。 实…

热烈祝贺! 爱创科技加入中经联溯源技术专业委员会!

6月27日,中国商业股份制企业经济联合会溯源技术专业委员会为北京爱创科技股份有限公司举行入会授牌仪式。授牌仪式由溯源技术专业委员会副秘书长卢要宁同志主持,溯源技术专业委员会主任宁晓鹏及北京爱创科技股份有限公司企业发展规划部总监杜薇出席。 在…

【网络安全带你练爬虫-100练】第3练:遍历获取到的列表中元素

目录 一、前言: 二、分析代码 三、完善代码 一、前言: (1)本练,我们来完善一下对于数据的处理 (2)对于同一标签内的内容的遍历爬取 上一段代码的,我们是不是在那个曾用名、高新…

库管理 + 表管理

REVIEW CREATE DROP DATABASE SELECT DATABASE(); SHOW DATABASES ;CREATE DATABASE IF NOT EXISTS GAMEDB ; DROP DATABASE IF EXISTS GAMEDB; CREATE SHOW ALTER TABLE 如何给表头重命名 CREATE TABLE student.studentinfo(name char(10), sex char(10), class char(5…

Redis的介绍和安装教程(配置文件)

1.Redis简单的介绍 redis是一种键值对的NoSql数据库,这里有两个关键字: 键值对 Nosql 其中键值型,是指Redis中存储的数据都是以key.value对的形式多种多样,可以实字符串、数值、甚至json,可以参考HashMap 然后NoSq…

[CSCCTF 2019 Qual] FlaskLight

打开链接,在注释里发现了参数名和请求方式 结合题目flask,检查是否存在SSTI模块注入: ?search{{7*7}} (如果对这类题不了解的建议先看我另一篇博客http://t.csdn.cn/4d812) 通过回显发现被执行了,存在S…

NacosConfig获取不到配置中心

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>3.0.3</version></dependency> 版本说明 alibaba/spring-cloud-alibaba Wiki (github.com) …

【STM32智能车】小车状态

【STM32智能车】小车状态 搭建智能车 65MM轮径小车所选材料安装说明直行测试智能车可能存在的状态 智能车功能丰富&#xff0c;我们从最基础的开始&#xff0c;先来搭建一个智能车吧~。 搭建智能车 我们之前用了一个测试板子去学习调试电机&#xff0c;是时候拼装一个简单的车来…

CSS弹性盒子中弹性子元素文本超出弹性子元素宽或高后导致撑开弹性子元素原本宽或高的解决方法

当使用弹性布局时&#xff0c;设置父容器为弹性容器后&#xff0c;弹性子元素的文本内容超出宽或高后会撑开弹性子元素的原本应该显示的宽高&#xff0c;溢出父容器&#xff0c;只要设置弹性子元素的宽或高&#xff08;由父容器弹性排列方向决定&#xff09;的属性值为0即可解决…

echarts dataZoom.slider is used but not imported.

使用dataZoom时图表报错&#xff1a; resize should not be called during main process. omponent dataZoom.slider is used but not imported. 解决方法&#xff1a; 在使用的页面种单独引入一下dataZoom&#xff1a; import ‘echarts/lib/component/dataZoom’;

Redis【实战篇】---- Redis消息队列

Redis【实战篇】---- Redis消息队列 1. Redis消息队列 - 认识消息队列2. Redis消息队列 - 基于List实现消息队列3. Redis消息队列 - 基于PubSub的消息队列4. Redis消息队列 - 基于Stream的消息队列5. Redis消息队列 - 基于Stream的消息队列-消费组6. 基于Redis的Stream结构作为…

环肽抑制剂:1088715-84-7,LY2510924,LY2510924游离态,试剂相关特点说明

​编辑资料作者&#xff1a;陕西新研博美生物科技有限公司小编MISSwu​ LY2510924&#xff0c;LY2510924游离态&#xff0c;拮抗剂LY2510924&#xff0c;环肽&#xff0c;抑制剂 Product structure&#xff1a; Product specifications&#xff1a; 1.CAS No&#xff1a;10887…

机器学习基础之《特征工程(1)—数据集》

一、数据集 1、目标 知道数据集分为训练集和测试集 会使用sklearn的数据集 2、可用数据集 公司内部&#xff0c;比如百度、微博 数据接口&#xff0c;花钱 政府拥有的数据集 3、在学习阶段用到的数据集 scikit-learn特点&#xff1a; &#xff08;1&#xff09;数据量较小 &…