Java BufferedImage转换为MultipartFile方式
作者:西凉的悲伤 时间:2022-07-13 10:02:46
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 IOException {
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();
}
方法二
引入依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.2</version>
<scope>compile</scope>
</dependency>
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中声明。如下:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
如需添加最大,最小等范围控制,请自行百度参考。
方法一:强转
方法二:
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);<br> f.deleteOnExit();
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
亲测有效。
来源:https://blog.csdn.net/qq_33697094/article/details/114357533
标签:Java,BufferedImage,MultipartFile
0
投稿
猜你喜欢
android实现动态显示隐藏进度条
2023-04-12 23:07:10
java 高并发中volatile的实现原理
2022-11-24 19:58:22
Hibernate三种状态和Session常用的方法
2021-11-28 15:04:43
Feign调用中的两种Header传参方式小结
2022-10-25 02:47:17
浅析Bean Searcher 与 MyBatis Plus 区别介绍
2022-08-28 03:25:41
Android多渠道打包时获取当前渠道的方法
2021-06-18 18:10:25
SpringBoot参数校验与国际化使用教程
2021-11-13 15:52:21
详解Android运行时权限及APP适配方法
2021-06-15 11:06:17
Mybatis MapperScannerConfigurer自动扫描Mapper接口生成代理注入到Spring的方法
2023-04-17 11:57:25
Android PopupWindow增加半透明蒙层
2021-12-30 04:12:09
java实现省市区转换成树形结构
2022-11-27 03:43:37
Java查找不重复无序数组中是否存在两个数字的和为某个值
2023-08-22 16:44:40
Intelli IDEA安装Scala插件并安装Scala软件和配置环境变量的详细教程
2023-02-16 23:49:01
完美解决java读取大文件内存溢出的问题
2023-07-31 17:53:17
C#中函数的创建和闭包的理解
2022-08-17 01:14:35
java源码解析之String类的compareTo(String otherString)方法
2023-11-11 23:10:00
Android 数据库文件存取至储存卡的方法
2023-05-08 19:12:14
源码解析JDK 1.8 中的 Map.merge()
2023-11-16 23:49:25
android横竖屏切换不重启activity解决方案
2022-09-04 06:57:56
Android中解决WebView上下滑动监听问题
2022-04-18 04:45:37