Java BufferedImage转换为MultipartFile方式

网友投稿 342 2022-12-07

Java BufferedImage转换为MultipartFile方式

目录BufferedImage转换为MultipartFile方法一方法二java数据转存的中MultipartFile转File错误背景通过搜索引擎 找到了以下两种方法

BufferedImage转换为MultipartFile

Java里读取图片或调整图片大小可使用BufferedImage进行操作(参考我另一篇文章Java修改图片大小尺寸),但有时候我们需要将BufferedImage转为MultipartFile进行其他操作可如下转换:

方法一

1.新建ConvertToMultipartFile类实现MultipartFile接口

import org.springframework.web.multipart.MultipartFile;

import java.io.*;

public class ConvertToMultipartFile implements MultipartFile {

private byte[] fileBytes;

String name;

String originalFilename;

String contentType;

boolean isEmpty;

long size;

public ConvertToMultipartFile(byte[] fileBytes, String name, String originalFilename, String contentType,

long size) {

this.fileBytes = fileBytes;

this.name = name;

this.originalFilename = originalFilename;

this.contentType = contentType;

this.size = size;

this.isEmpty = false;

}

@Override

public String getName() {

return name;

}

@Override

public String getOriginalFilename() {

return originalFilename;

}

@Override

public String getContentType() {

return contentType;

}

@Override

public boolean isEmpty() {

return isEmpty;

}

@Override

public long getSize() {

return size;

}

@Override

public byte[] getBytes() throws IOExceptioqfBioRBNhn {

return fileBytes;

}

@Override

public InputStream getInputStream() throws IOException {

return new ByteArrayInputStream(fileBytes);

}

@Override

public void transferTo(File dest) throws IOException, IllegalStateException {

new FileOutputStream(dest).write(fileBytes);

}

}

2.BufferedImage 转换为 MultipartFile

BufferedImage 先转为byte[ ],再通过上面的ConvertToMultipartFile类转为MultipartFile

try {

//读取图片转换为 BufferedImage

BufferedImage image = ImageIO.read(new FileInputStream("F:/test/pic1.jpg"));

//BufferedImage 转化为 ByteArrayOutputStream

ByteArrayOutputStream out = new ByteArrayOutputStream();

ImageIO.write(image, "jpg", out);

//ByteArrayOutputStream 转化为 byte[]

byte[] imageByte = out.toByteArray();

//将 byte[] 转为 MultipartFile

MultipartFile multipartFile = new ConvertToMultipartFile(imageByte, "newNamepic", "pic1", "jpg", imageByte.length);

} catch (IOException e) {

e.printStackTrace();

}

方法二

引入依赖:

org.springframework

spring-test

5.3.2

compile

try {

//读取图片转换为 BufferedImage

BufferedImage image = ImageIO.read(new FileInputStream("F:/test/pic1.jpg"));

//调整图片大小后的BufferedImage。resizeImage方法是调整图片大小的可参考文章开头我上一篇文章

BufferedImage newImage = ImageUtils.resizeImage(image, 200, 200);

//将newImage写入字节数组输出流

ByteArrayOutputStream baos = new ByteArrayOutputStream();

ImageIO.write( newImage, "jpg", baos );

//转换为MultipartFile

MultipartFile multipartFile = new MockMultipartFile("pic1.jpg", baos.toByteArray());

} catch (IOException e) {

e.printStackTrace();

}

Java数据转存的中MultipartFile转File

错误背景

由于文件储存在第三方的服务器上,所有需要讲将接收到MultipartFile文件 转换为File 然后传输。(Spring MVC)

通过搜索引擎 找到了以下两种方法

均要在先spring xml中声明。如下:

如需添加最大,最小等范围控制,请自行百度参考。

方法一:强转

方法二:

CommonsMultipartFile cf = (CommonsMultipartFile)multfile;

DiskFileItem fi = (DiskFileItem) cf.getFileItem();

File file = fi.getStoreLocation();

亲测有效。但是后期发现设置的问题 导致文件转换中错误,文件不可读从而导致 程序抛出 is not a normal file 异常。

因为错误出现的随机性很大,所以选择用缓冲区来实现这个转换即使用java 创建的临时文件 使用 MultipartFile.transferto()方法 。

代码如下:

File f = null;

try {

f=File.createTempFile("tmp", null);

file.transferTo(f);
   f.deleteOnExit();

} catch (HttpException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

亲测有效。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot 缓存 Caffeine使用解析
下一篇:解决springboot configuration processor对maven子模块不起作用的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~