Java BufferedImage轉(zhuǎn)換為MultipartFile方式
BufferedImage轉(zhuǎn)換為MultipartFile
Java里讀取圖片或調(diào)整圖片大小可使用BufferedImage進(jìn)行操作(參考我另一篇文章Java修改圖片大小尺寸),但有時(shí)候我們需要將BufferedImage轉(zhuǎn)為MultipartFile進(jìn)行其他操作可如下轉(zhuǎn)換:
方法一
1.新建ConvertToMultipartFile類實(shí)現(xiàn)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 轉(zhuǎn)換為 MultipartFile
BufferedImage 先轉(zhuǎn)為byte[ ],再通過上面的ConvertToMultipartFile類轉(zhuǎn)為MultipartFile
try {
//讀取圖片轉(zhuǎn)換為 BufferedImage
BufferedImage image = ImageIO.read(new FileInputStream("F:/test/pic1.jpg"));
//BufferedImage 轉(zhuǎn)化為 ByteArrayOutputStream
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", out);
//ByteArrayOutputStream 轉(zhuǎn)化為 byte[]
byte[] imageByte = out.toByteArray();
//將 byte[] 轉(zhuǎn)為 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 {
//讀取圖片轉(zhuǎn)換為 BufferedImage
BufferedImage image = ImageIO.read(new FileInputStream("F:/test/pic1.jpg"));
//調(diào)整圖片大小后的BufferedImage。resizeImage方法是調(diào)整圖片大小的可參考文章開頭我上一篇文章
BufferedImage newImage = ImageUtils.resizeImage(image, 200, 200);
//將newImage寫入字節(jié)數(shù)組輸出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( newImage, "jpg", baos );
//轉(zhuǎn)換為MultipartFile
MultipartFile multipartFile = new MockMultipartFile("pic1.jpg", baos.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
Java數(shù)據(jù)轉(zhuǎn)存的中MultipartFile轉(zhuǎn)File
錯(cuò)誤背景
由于文件儲(chǔ)存在第三方的服務(wù)器上,所有需要講將接收到MultipartFile文件 轉(zhuǎn)換為File 然后傳輸。(Spring MVC)
通過搜索引擎 找到了以下兩種方法
均要在先spring xml中聲明。如下:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
如需添加最大,最小等范圍控制,請(qǐng)自行百度參考。
方法一:強(qiáng)轉(zhuǎn)
方法二:
CommonsMultipartFile cf = (CommonsMultipartFile)multfile; DiskFileItem fi = (DiskFileItem) cf.getFileItem(); File file = fi.getStoreLocation();
親測(cè)有效。但是后期發(fā)現(xiàn)設(shè)置的問題 導(dǎo)致文件轉(zhuǎn)換中錯(cuò)誤,文件不可讀從而導(dǎo)致 程序拋出 is not a normal file 異常。
因?yàn)殄e(cuò)誤出現(xiàn)的隨機(jī)性很大,所以選擇用緩沖區(qū)來(lái)實(shí)現(xiàn)這個(gè)轉(zhuǎn)換即使用java 創(chuàng)建的臨時(shí)文件 使用 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();
}
親測(cè)有效。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中出現(xiàn)java.lang.IllegalStateException異常錯(cuò)誤的解決
這篇文章主要介紹了Java中出現(xiàn)java.lang.IllegalStateException異常錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
關(guān)于Netty--Http請(qǐng)求處理方式
這篇文章主要介紹了關(guān)于Netty--Http請(qǐng)求處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
JavaWeb實(shí)現(xiàn)注冊(cè)用戶名檢測(cè)
這篇文章主要為大家詳細(xì)介紹了JavaWeb實(shí)現(xiàn)注冊(cè)用戶名檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
Spring Boot集成Redis實(shí)現(xiàn)緩存機(jī)制(從零開始學(xué)Spring Boot)
這篇文章主要介紹了Spring Boot集成Redis實(shí)現(xiàn)緩存機(jī)制(從零開始學(xué)Spring Boot),需要的朋友可以參考下2017-04-04
SpringBoot配置文件application.properties的使用
這篇文章主要介紹了SpringBoot配置文件application.properties的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05

