Byte、File、MultipartFile之间的转换_byte[]转multipartfile-程序员宅基地

技术标签: java  文件操作  

一、byte[]转MultipartFile
需要引入jar包才能使用
pom.xml(版本可自行指定)

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-mock</artifactId>
    <version>2.0.8</version>   
</dependency>

MockMultipartFile查看源码就知道包含很多构造方法,下边的这种构造方法参数比较全,其他的我获取.getOriginalFilename()时是空的,第三个参数网上有ContentType.APPLICATION_OCTET_STREAM.toString()这种方式,我自己尝试我是没看到有这个包,倒是这个包里有MediaType.APPLICATION_OCTET_STREAM_VALUE。不知道是我的问题还是网上的都是抄的,不得不吐槽下网上的代码真的是一模一样,字母都不改下。。

MultipartFile file = new MockMultipartFile("__init__.py","__init__.py","application/octet-stream" ,bytes); //
MultipartFile[] multipartFiles = {
    file}; //此处因为我方法需要转成数组,没看到有构造器方法,故采用这种方式

二、byte[]转File文件

假如写入的文件名为test文件,在保证父目录存在的情况写可直接 File localFile = new File(path),父目录不存在则需要先调用mkdirs创建,只要文件的父路径存在,FileOutputStream会自动创建文件

    File localFile = new File(path);
    // 输出流
    OutputStream os = new FileOutputStream(localFile);
    os.write(bytes);
    os.close();

三、File文件转byte[]

//filePath文件的路径
FileInputStream initPyStream = new FileInputStream("filePath");
byte[] bytes = FileCopyUtils.copyToByteArray(initPyStream);

四、File文件路径转MultipartFile
在MutipartFile中没看到有file直接转MutipartFile的构造器,所以采用的思路是:
File --> inputStream -->MutipartFile

File file = new File(filePath);
InputStream inputStream = new FileInputStream(file);
//借助的工具同样引入spring-mock包,pom文件在上边有
MultipartFile multipartFile = new MockMultipartFile(file.getName(), inputStream);

五、MultipartFile文件转byte[]

byte[] imgBytes = multipartFile.getBytes();

六、MultipartFile文件转File

可使用自带的transferTo方法

private String uploadFile(MultipartFile file) {
    
    String fileName = file.getOriginalFilename();
    String suffixName = fileName.substring(fileName.lastIndexOf("."));
    String filePath = gitLibConfig.getFileTempAddr();
    String path = filePath + fileName;
    log.info("上传的文件名为:{},后缀名为{},路径{}", fileName, suffixName, filePath);
    File f = new File(path);
    if (!f.getParentFile().exists()) {
    
        f.getParentFile().mkdirs();
    }
    try {
    
        file.transferTo(f);
    } catch (IOException e) {
    
        log.info("上传文件:{} 失败", fileName);
    }
    return f.getPath();
}

今天在使用transferto是遇到个奇怪问题:
C:\Users\zhang\AppData\Local\Temp\E:\fileUpload\20190403203101_back1.png (文件名、目录名或卷标语法不正确。),后面的路径是我要保存的路径,前面的路径是transferto()自己加的,放到linux中也给我加了一个/tmp/前缀。。之前用的好好的,不知道是不是环境版本问题导致的。
使用FileUtils.copyInputStreamToFile(file.getInputStream(), tempFile);方法代替
需要引入commons-io包

至此三者直接的转换情况都已经总结完了。。不知道你们我是对于文件的一些操作API做了就忘,忘了再搜。

API调用师加油

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

智能推荐

string与doule互相转换并保留两位小数_string转double保留两位小数-程序员宅基地

文章浏览阅读2.9k次。其实string与double、int的互转有一些函数可以直接用,例如: //doule转string string str1 = to_string(3.14); //int转string string str2 = to_string(4); //string转int int x= atoi(str2.c_str()); //string转double double y = stof(str1.c_str());但是不满足我想顺便四舍五入保留小数位的需求,所以自己写了两个函数。_string转double保留两位小数

azkaban任务报错java.lang.RuntimeException: The root scratch dir: /tmp/hive_azkaban kettle 时间长报错-程序员宅基地

文章浏览阅读3.2k次。azkaban运行任务的时候失败报错如下:23-03-2016 08:16:14 CST analyzer-kafka2hdfs_new ERROR - Exception in thread "main" org.apache.hive.service.cli.HiveSQLException: java.lang.RuntimeException: The root scratch d_azkaban kettle 时间长报错

PHP生成迅雷、快车、旋风等软件的下载链接代码实例-程序员宅基地

文章浏览阅读131次。<?php function Download() { $urlodd=explode('//',$_POST["url"],2);//把链接分成2段,//前面是第一段,后面的是第二段 $head=strtolower($urlodd[0]);//PHP对大小写敏感,先统一转换成小写,不然 出现HtTp:或者ThUNDER:这种怪异的写法不好处...

创建带有UTF-8 的声明的XMLDocument_xmlnewdoc utf-8-程序员宅基地

文章浏览阅读4.6k次。class Program { static void Main(string[] args) { // Create and load the XML document. XmlDocument doc = new XmlDocument(); string xmlString = "_xmlnewdoc utf-8

Jquery 多选下拉列表插件jquery multiselect-程序员宅基地

文章浏览阅读286次。有一个多选的需求,在网上找到了这个插件:multiselecthttps://github.com/ehynds/jquery-ui-multiselect-widgetcsdn博客上有这个插件的介绍,不少童鞋都问了这么个问题,怎么获取选中的值?真是个好问题,因为我在看demo的时候也发现了这个问题,呵呵!先简单说说这个插件: jquery-multisel..._multiselect 多级 多选插件 checkbox

解决android studio打包后安装APK提示“签名不一致,该应用可能已被修改。“_签名不一致该应用可能已被修改-程序员宅基地

文章浏览阅读8.4k次,点赞5次,收藏15次。现象解决办法修改applicationId名_签名不一致该应用可能已被修改

随便推点

BACNET之VTS的配置过程-程序员宅基地

文章浏览阅读9k次,点赞3次,收藏9次。注:在运行vts之前,需要将bacnetserver运行起来,可从网上下载bacnet协议栈,在linux 虚拟机上来运行。1.首先下载vts运行包,vts-3.5.2-win32,此软件为免安装软件。2.解压后,请注意先安装上wincap,双击其中的.exe文件,即可打开文件,如下:3.打开后,新建一个workspace,如下:4.然后打开edit,选择devic_bacnet之vts的配置过程

Java金额每隔三位加上一个逗号_java金额三位数一个逗号-程序员宅基地

文章浏览阅读1.4w次,点赞5次,收藏5次。JAVA实现给数字加逗号:说明:将float类型的数据转换成以3位逗号隔开的字符串,并且保留两位有效数字 public static String formatTosepara(float data) {DecimalFormat df = new DecimalFormat("#,###.00"); return df.format(data);}如果保留整数,那么 De_java金额三位数一个逗号

使用Xcode GPU Frame Caputre教程-程序员宅基地

文章浏览阅读307次。http://blog.manbolo.com/2012/11/20/using-xcode-opengl-es-frame-capture这里是原文,因为它版本比较老和它demo的限制,所以也想写一个基于Xcode6上基于3d渲染的分析的教程 Xcode和Visual Studio的一个主要差别,还是再Xcode有一套免费的的性能工具,例如Instruments,不过对于图..._xcode frame capture 捕捉不到

新手不要再被误导!这是一篇最新的Xposed模块编写教程_xposedbridgeapi-82.jar-程序员宅基地

文章浏览阅读1.5k次,点赞3次,收藏7次。0x00 前言作者写于2018.11.21,我在转载时日期为2021.01.01,博客内容已经测试了,完全正确且可以运行,新手建议从此看起再看官方文档。在互联网上,关于Xposed模块编写的教程可谓是一抓一大把。但由于时间的推移,很多工具和方法都发生了变化(如Eclipse退出安卓编程舞台,AndroidStudio 不断升级导致其一些设置也随之变化等)也正因此,网上的教程往往有一些时限性,比如现如今 provide 这个关键字已经被舍弃了却仍有人在用,还有些说要把jar包放到lib文件夹而非lib_xposedbridgeapi-82.jar

SpringBoot异常处理_如何排除springboot默认的异常管理逻辑-程序员宅基地

文章浏览阅读288次。文章目录SpringBoot异常处理1. SpringBoot默认的异常处理方式1.1 原理分析1.2 取消默认异常处理逻辑2. 自定义异常处理逻辑2.1 方式一:实现ErrorPageRegistrar接口2.2 方式二:通过注解@ExceptionHandlerSpringBoot异常处理1. SpringBoot默认的异常处理方式1.1 原理分析SpringBoot内部已经进行了统一..._如何排除springboot默认的异常管理逻辑

第一范式、第二范式、第三范式、BCNF(BC范式)-程序员宅基地

文章浏览阅读7.6k次,点赞11次,收藏37次。范式原理笔记数据库关系数据理论----范式范式原理笔记什么是(范式)---范式介绍范式发展1、第一范式2、第二范式3、第三范式4、BCNF(扩展第三范式)什么是(范式)—范式介绍官方介绍,数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式。满足最低要求的叫第一范式,简称1NF;在第一范式中满足进一步要求的为第二范式,其余的一次类推。还不懂?那么简单来说范式是一种标准,也就是你设计表结构是要符合规范。就好像是你装修自己的房子,你按照的标准越高,那么你的房子就更加的牢固安全。所谓“第几范_第一范式

推荐文章

热门文章

相关标签