JavaBufferedImage转换为MultipartFile⽅式
⽬录
BufferedImage转换为MultipartFile
⽅法⼀
⽅法⼆
Java数据转存的中MultipartFile转File
错误背景
通过搜索引擎到了以下两种⽅法
BufferedImage转换为MultipartFile
Java⾥读取图⽚或调整图⽚⼤⼩可使⽤BufferedImage进⾏操作(参考我另⼀篇⽂章),但有时候我们需要将BufferedImage 转为MultipartFile进⾏其他操作可如下转换:
⽅法⼀
1.新建ConvertToMultipartFile类实现MultipartFile接⼝
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
public class ConvertToMultipartFile implements MultipartFile {
java创建文件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.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 = ad(new FileInputStream("F:/test/pic1.jpg"));
//BufferedImage 转化为 ByteArrayOutputStream
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", out);
//ByteArrayOutputStream 转化为 byte[]
byte[] imageByte = ByteArray();
//将 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 = ad(new FileInputStream("F:/test/pic1.jpg"));
//调整图⽚⼤⼩后的BufferedImage。resizeImage⽅法是调整图⽚⼤⼩的可参考⽂章开头我上⼀篇⽂章
BufferedImage newImage = sizeImage(image, 200, 200);
//将newImage写⼊字节数组输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( newImage, "jpg", baos );
//转换为MultipartFile
MultipartFile multipartFile = new MockMultipartFile("pic1.jpg", ByteArray());
} catch (IOException e) {
e.printStackTrace();
}
Java数据转存的中MultipartFile转File
错误背景
由于⽂件储存在第三⽅的服务器上,所有需要讲将接收到MultipartFile⽂件转换为File 然后传输。(Spring MVC)
通过搜索引擎到了以下两种⽅法
均要在先spring xml中声明。如下:
<bean id="multipartResolver" class="org.springframework.web.multipartmons.CommonsMultipartResolver" />
如需添加最⼤,最⼩等范围控制,请⾃⾏百度参考。
⽅法⼀:强转
⽅法⼆:
CommonsMultipartFile cf = (CommonsMultipartFile)multfile;
DiskFileItem fi = (DiskFileItem) cf.getFileItem();
File file = fi.getStoreLocation();
亲测有效。但是后期发现设置的问题导致⽂件转换中错误,⽂件不可读从⽽导致程序抛出 is not a normal file 异常。
因为错误出现的随机性很⼤,所以选择⽤缓冲区来实现这个转换即使⽤java 创建的临时⽂件使⽤ ansferto()⽅法。
代码如下:
File f = null;
try {
ateTempFile("tmp", null);
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
亲测有效。
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论