網站首頁 編程語言 正文
MultipartFile轉base64
/**
* 將MultipartFile 圖片文件編碼為base64
* @param file
* @return
* @throws Exception
*/
public static String generateBase64(MultipartFile file){
if (file == null || file.isEmpty()) {
throw new RuntimeException("圖片不能為空!");
}
String fileName = file.getOriginalFilename();
String fileType = fileName.substring(fileName.lastIndexOf("."));
String contentType = file.getContentType();
byte[] imageBytes = null;
String base64EncoderImg="";
try {
imageBytes = file.getBytes();
BASE64Encoder base64Encoder =new BASE64Encoder();
/**
* 1.Java使用BASE64Encoder 需要添加圖片頭("data:" + contentType + ";base64,"),
* 其中contentType是文件的內容格式。
* 2.Java中在使用BASE64Enconder().encode()會出現字符串換行問題,這是因為RFC 822中規定,
* 每72個字符中加一個換行符號,這樣會造成在使用base64字符串時出現問題,
* 所以我們在使用時要先用replaceAll("[\\s*\t\n\r]", "")解決換行的問題。
*/
base64EncoderImg = "data:" + contentType + ";base64," + base64Encoder.encode(imageBytes);
base64EncoderImg = base64EncoderImg.replaceAll("[\\s*\t\n\r]", "");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return base64EncoderImg;
}
base64轉MultipartFile
思路: 先將base64轉成File,再將File轉成MultipartFile
base64轉File,涉及使用枚舉類
/**
* base64文件類型,前綴
* @author
*/
public enum Base64FileTypeEnum {
// 文件類型
BASE64_FILETYPE_DOC(".doc", "data:application/msword;base64"),
BASE64_FILETYPE_DOCX(".docx", "data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64"),
BASE64_FILETYPE_XLS(".xls", "data:application/vnd.ms-excel;base64"),
BASE64_FILETYPE_XLSX(".xlsx", "data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64"),
BASE64_FILETYPE_PDF(".pdf", "data:application/pdf;base64"),
BASE64_FILETYPE_PPT(".ppt", "data:application/vnd.ms-powerpoint;base64"),
BASE64_FILETYPE_PPTX(".pptx", "data:application/vnd.openxmlformats-officedocument.presentationml.presentation;base64"),
BASE64_FILETYPE_TXT(".txt", "data:text/plain;base64"),
// 圖片類型
BASE64_FILETYPE_PNG(".png", "data:image/png;base64"),
BASE64_FILETYPE_JPG(".jpg", "data:image/jpeg;base64"),
BASE64_FILETYPE_JPEG(".jpeg", "data:image/jpeg;base64"),
BASE64_FILETYPE_GIF(".gif", "data:image/gif;base64"),
BASE64_FILETYPE_SVG(".svg", "data:image/svg+xml;base64"),
BASE64_FILETYPE_ICO(".ico", "data:image/x-icon;base64"),
BASE64_FILETYPE_BMP(".bmp", "data:image/bmp;base64"),
// // 二進制流
// BASE64_FILETYPE_OCTET_STREAM("octet-stream", "data:application/octet-stream;base64,"),
;
private Base64FileTypeEnum(String code, String value) {
this.code = code;
this.value = value;
}
private String code;
private String value;
public String getCode() {return code;}
public String getValue() {return value;}
public static String getFileType(String value) {
Base64FileTypeEnum[] types = values();
for (Base64FileTypeEnum x : types) {
if (x.getValue().equals(value)) {
return x.getCode();
}
}
return null;
}
}
//BASE64解碼成File文件
public File base64ToFile(String base64, String fileName) {
File file = null;
//創建文件目錄
String filePath=this.getClass().getClassLoader().getResource("").getPath();
File dir=new File(filePath);
if (!dir.exists() && !dir.isDirectory()) {
dir.mkdirs();
}
BufferedOutputStream bos = null;
FileOutputStream fos = null;
try {
//截取base64頭部,獲取文件類型
String fileType = Base64FileTypeEnum.getFileType(base64.substring(0, base64.indexOf(",")));
//去掉頭部,防止轉換文件后打開顯示文件損壞
String s = base64.substring(base64.indexOf(",")+1);
byte[] bytes = new BASE64Decoder().decodeBuffer(s);
file=new File(filePath+"/"+fileName+fileType);
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos);
bos.write(bytes);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return file;
}
生成File后我們轉成MultipartFile
//File轉MultipartFile
public static MultipartFile getMultipartFile(File file) {
FileItem item = new DiskFileItemFactory().createItem("file"
, MediaType.MULTIPART_FORM_DATA_VALUE
, true
, file.getName());
try (InputStream input = new FileInputStream(file);
OutputStream os = item.getOutputStream()) {
// 流轉移
IOUtils.copy(input, os);
} catch (Exception e) {
throw new IllegalArgumentException("Invalid file: " + e, e);
}
return new CommonsMultipartFile(item);
}
原文鏈接:https://blog.csdn.net/weixin_43949154/article/details/125783459
相關推薦
- 2022-12-30 React錯誤邊界Error?Boundaries詳解_React
- 2023-04-06 python中注釋用法簡單示例_python
- 2022-09-21 Python?Ast抽象語法樹的介紹及應用詳解_python
- 2023-03-27 Android?Framework原理Binder驅動源碼解析_Android
- 2022-09-28 基于OpenCV(python)的實現文本分割之垂直投影法_python
- 2024-03-07 SpringAOP基于XML方式實現(了解)
- 2023-04-24 Python?argparse中的action=store_true用法小結_python
- 2022-04-07 C++中類的默認成員函數詳解_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支