当前位置: 首页 > news >正文

Springboot byte[] 转 MultipartFile ,InputStream 转 MultipartFile

之前有一篇:
Springboot Http文件的访问 Url 转换 MultipartFile ,File 转 MultipartFile_小目标青年的博客-CSDN博客

pom.xml

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.3.2</version>
        </dependency>

然后从 spring-test 的 org.springframework.mock.web 里面抽取一下它的好用的代码:
 

MyMultipartFile.java

import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;


public class MyMultipartFile implements MultipartFile {

    private final String name;

    private String originalFilename;

    private String contentType;

    private final byte[] content;


    public MyMultipartFile(String name, byte[] content) {
        this(name, "", null, content);
    }


    public MyMultipartFile(String name, InputStream contentStream) throws IOException {
        this(name, "", null, FileCopyUtils.copyToByteArray(contentStream));
    }


    public MyMultipartFile(String name, String originalFilename, String contentType, byte[] content) {
        this.name = name;
        this.originalFilename = (originalFilename != null ? originalFilename : "");
        this.contentType = contentType;
        this.content = (content != null ? content : new byte[0]);
    }

    public MyMultipartFile(String name, String originalFilename, String contentType, InputStream contentStream)
            throws IOException {

        this(name, originalFilename, contentType, FileCopyUtils.copyToByteArray(contentStream));
    }

    @Override
    public String getName() {
        return this.name;
    }

    @Override
    public String getOriginalFilename() {
        return this.originalFilename;
    }

    @Override
    public String getContentType() {
        return this.contentType;
    }

    @Override
    public boolean isEmpty() {
        return (this.content.length == 0);
    }

    @Override
    public long getSize() {
        return this.content.length;
    }

    @Override
    public byte[] getBytes() throws IOException {
        return this.content;
    }

    @Override
    public InputStream getInputStream() throws IOException {
        return new ByteArrayInputStream(this.content);
    }

    @Override
    public void transferTo(File dest) throws IOException, IllegalStateException {
        FileCopyUtils.copy(this.content, dest);
    }
}

使用简例:
 

    @RequestMapping("/myTest")
    public void myTest()  {
        try {
            //伪代码示例,通过XXX把文件的 byte[] 拿出来
            byte[] fileBytes = ExcelUtil.exportMultiSheet();
            InputStream inputStream = new ByteArrayInputStream(fileBytes);
            MultipartFile file = new MyMultipartFile("test.xlsx","test.xlsx", ContentType.APPLICATION_OCTET_STREAM.toString(), inputStream);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

相关文章:

  • Springboot 最细节全面的接口传参接参介绍,总有你喜欢的一种方式
  • Springboot 整合RabbitMq ,用心看完这一篇就够了
  • 用过Apifox这个API接口工具后,确实感觉postman有点鸡肋......
  • ClickHouse 挺快,esProc SPL 更快
  • 苹果6sp内存可以扩展吗_饮用苹果醋可以减肥吗?
  • tcpdump抓两个网卡的包_Kubernetes 疑难杂症排查分享:神秘的溢出与丢包
  • 使用vim的重不重要_如何优雅地使用 Vim?
  • hbase 使用disruptor_HBase和Kryo混合使用时出现的jar包冲突
  • mediacodec延时_ijkplayer播放rtsp流卡顿、延迟问题解决
  • ei拼音的四个声调对应的字_【ei的四个声调有汉字】作文写作问答 - 归教作文网...
  • 高斯模糊java代码_一行java代码实现高斯模糊效果
  • springboot切面返回值_SpringBoot之切面AOP
  • cubase怎么用耳机听_听无损音乐用什么蓝牙耳机好,如何选择适合自己的蓝牙耳机...
  • 发动机压缩比怎么计算公式_柴油发动机动力猛、油耗低,为啥家用车都不用它...
  • 儿童手工制作日历_儿童手工折纸:怎么用纸制作一个相册集?折法简单,来一起DIY下...
  • 【Linux系统编程】快速查找errno错误码信息
  • Android优雅地处理按钮重复点击
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Flannel解读
  • LeetCode29.两数相除 JavaScript
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Logstash 参考指南(目录)
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • python 装饰器(一)
  • Python实现BT种子转化为磁力链接【实战】
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 创建一个Struts2项目maven 方式
  • 从输入URL到页面加载发生了什么
  • 电商搜索引擎的架构设计和性能优化
  • 回流、重绘及其优化
  • 跨域
  • 码农张的Bug人生 - 见面之礼
  • 手写双向链表LinkedList的几个常用功能
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • Mac 上flink的安装与启动
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • scrapy中间件源码分析及常用中间件大全
  • 关于Android全面屏虚拟导航栏的适配总结
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (1)STL算法之遍历容器
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (SpringBoot)第七章:SpringBoot日志文件
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)计算机毕业设计大学生兼职系统
  • (十六)串口UART
  • (一)为什么要选择C++
  • (转) RFS+AutoItLibrary测试web对话框
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • ***详解账号泄露:全球约1亿用户已泄露
  • .a文件和.so文件
  • .net 7 上传文件踩坑