Byte、File、MultipartFile之间的转换

文件操作 专栏收录该内容
3 篇文章 0 订阅

一、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调用师加油

  • 4
    点赞
  • 3
    评论
  • 7
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值