最近這幾天的實習工作,需要基於Spring Boot做上傳文件的接口,後來還要做一個基於Base64編碼的單獨上傳圖片的接口,圖片經過base64編碼後如下圖。
接收前臺傳過來的圖片Base64編碼和圖片文件名後。
我的解決思路:
(1)把Base64編碼轉化爲MultipartFile的形式,這就需要重寫MultipartFile的方法了。
重寫MultipartFile的方法
/**
* @author: Stephen
* @date: 2019/1/9
* @description: 重寫MultipartFile方法
*/
public class Base64MultipartFile implements MultipartFile {
private final byte[] imgContent;
private final String header;
private final String fileName;
public Base64MultipartFile(byte[] imgContent, String header, String fileName){
this.imgContent = imgContent;
this.header = header.split(";")[0];
this.fileName = fileName;
}
@Override
public String getName() {
return System.currentTimeMillis() + Math.random() + "." + header.split("/")[1];
}
@Override
public String getOriginalFilename() {
return fileName;
}
@Override
public String getContentType() {
return header.split(":")[1];
}
@Override
public boolean isEmpty() {
return imgContent == null || imgContent.length == 0;
}
@Override
public long getSize() {
return imgContent.length;
}
@Override
public byte[] getBytes() throws IOException {
return imgContent;
}
@Override
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(imgContent);
}
@Override
public void transferTo(File dest) throws IOException, IllegalStateException {
new FileOutputStream(dest).write(imgContent);
}
}
Base64轉化爲MultipartFile,後臺處理的邏輯
/**
* Base64轉化爲MultipartFile
*
* @param data 前臺傳過來base64的編碼
* @param fileName 圖片的文件名
* @return
*/
@Override
public MultipartFile base64toMultipart(String data, String fileName) {
try {
String[] baseStrs = data.split(",");
BASE64Decoder decoder = new BASE64Decoder();
byte[] b = decoder.decodeBuffer(baseStrs[1]);
for(int i = 0; i < b.length; ++i) {
if (b[i] < 0) {
b[i] += 256;
}
}
return new Base64MultipartFile(b, baseStrs[0] , fileName);
} catch (IOException e) {
throw new RestException("IO流異常" , e);
}
}