前臺傳入base64圖片,java後臺轉為MultipartFile檔案
阿新 • • 發佈:2020-10-07
package coml.utils; import org.apache.catalina.connector.Request; import org.springframework.web.multipart.MultipartFile; import sun.misc.BASE64Decoder; import javax.servlet.http.HttpServletRequest; import java.io.*; import java.util.UUID; /** * base64轉為multipartFile工具類 * base64Convert */ publicclass Base64DecodeMultipartFile implements MultipartFile { private final byte[] imgContent; private final String header; public Base64DecodeMultipartFile(byte[] imgContent, String header) { this.imgContent = imgContent; this.header = header.split(";")[0]; } @Overridepublic String getName() { return System.currentTimeMillis() + Math.random() + "." + header.split("/")[1]; } @Override public String getOriginalFilename() { return System.currentTimeMillis() + (int) Math.random() * 10000 + "." + header.split("/")[1]; } @Override publicString 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 * * @param base64 * @return */ public static MultipartFile base64Convert(String base64) { String[] baseStrs = base64.split(","); BASE64Decoder decoder = new BASE64Decoder(); byte[] b = new byte[0]; try { b = decoder.decodeBuffer(baseStrs[1]); } catch (IOException e) { e.printStackTrace(); } for (int i = 0; i < b.length; ++i) { if (b[i] < 0) { b[i] += 256; } } return new Base64DecodeMultipartFile(b, baseStrs[0]); } public static void main(String[] args) throws IOException { /** * base64轉為multipartFile */ MultipartFile file = base64Convert("data:video/mp4;base64,AAAAAAAA....==");//很長 if (file.isEmpty()) { System.out.println("沒有上傳檔案"); } /** * 獲取檔案字尾 */ String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1) .toLowerCase(); /** * 重構檔名稱 */ String pikId = UUID.randomUUID().toString().replaceAll("-", ""); String fileName = pikId + "." + fileExt; /** * 儲存路徑可在配置檔案中指定 */ File filePath = new File("D:/temp/test/"); if (!filePath.exists()) { filePath.mkdirs(); } File fileLast = new File(filePath, fileName); /** * 指定好儲存路徑 * File file = new File(fileName); */ try { /** * 儲存檔案 * 使用此方法儲存必須要絕對路徑且資料夾必須已存在,否則報錯 */ file.transferTo(fileLast); } catch (IOException e) { e.printStackTrace(); } } }