Java文件與Base64之間的轉(zhuǎn)化方式
更新時間:2025年02月11日 14:59:39 作者:Monly21
這篇文章介紹了如何使用Java將文件(如圖片、視頻)轉(zhuǎn)換為Base64編碼,以及如何將Base64編碼轉(zhuǎn)換回文件,通過提供具體的工具類實現(xiàn),作者希望幫助讀者更好地理解和應(yīng)用這一過程
Java文件與Base64之間的轉(zhuǎn)化
1、文件轉(zhuǎn)Base64工具類
可以將圖片、視頻轉(zhuǎn)化為Base64格式
/**
* 文件轉(zhuǎn)Base64
* @param filePath
* @return
*/
public static String convertFileToBase64(String filePath) {
try {
// 讀取文件為字節(jié)數(shù)組
byte[] fileBytes = Files.readAllBytes(Paths.get(filePath));
// 將字節(jié)數(shù)組轉(zhuǎn)換為Base64編碼的字符串
String base64EncodedString = Base64.getEncoder().encodeToString(fileBytes);
return base64EncodedString;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}2、Base64轉(zhuǎn)文件工具類
將Base64格式的圖片、視頻下載到本地
/**
* Base64轉(zhuǎn)文件
* @param base64String Base64字符串
* @param filePath 輸出的文件路徑
* @param mimeType
* MIME類型:
* 視頻 video/mp4
* PNG: image/png
* JPEG: image/jpeg
* GIF: image/gif
* BMP: image/bmp
* WebP: image/webp
* @return
*/
public static boolean convertBase64ToFile(String base64String, String filePath, String mimeType) {
try {
// 將Base64編碼的字符串轉(zhuǎn)換為字節(jié)數(shù)組
byte[] fileBytes = Base64.getDecoder().decode(base64String);
// 創(chuàng)建文件頭信息
String header = "data:" + mimeType + ";base64,";
byte[] headerBytes = header.getBytes();
// 合并文件頭和文件內(nèi)容
byte[] combinedBytes = new byte[headerBytes.length + fileBytes.length];
System.arraycopy(headerBytes, 0, combinedBytes, 0, headerBytes.length);
System.arraycopy(fileBytes, 0, combinedBytes, headerBytes.length, fileBytes.length);
// 將字節(jié)數(shù)組寫入文件
Files.write(Paths.get(filePath), fileBytes);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}3、綜合案例
package org.ming;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
public class FileToBase64Converter {
/**
* 文件轉(zhuǎn)Base64
* @param filePath
* @return
*/
public static String convertFileToBase64(String filePath) {
try {
// 讀取文件為字節(jié)數(shù)組
byte[] fileBytes = Files.readAllBytes(Paths.get(filePath));
// 將字節(jié)數(shù)組轉(zhuǎn)換為Base64編碼的字符串
String base64EncodedString = Base64.getEncoder().encodeToString(fileBytes);
return base64EncodedString;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 文件轉(zhuǎn)Base64流程
*/
public static List<Map<String, String>> fileToBase64() {
List<Map<String, String>> dataList = new ArrayList<>();
// 讀取的圖片路徑
String filePath = "D:\\repo\\java_base_test\\static\\img\\GcJcSbJkBjVo.png";
// 讀取的視頻路徑
String videoPath = "D:\\repo\\java_base_test\\static\\video\\cs.mp4";
String fileToBase64 = convertFileToBase64(filePath);
String videoToBase64 = convertFileToBase64(videoPath);
if (fileToBase64 != null) {
System.out.println("圖片轉(zhuǎn)換成功");
dataList.add(new HashMap<String, String>() {{
put("outPath", String.format("D:\\repo\\java_base_test\\static\\img\\GcJcSbJkBjVo_%s.png", new Date().getTime()));
put("base64Str", fileToBase64);
put("mimeType", "image/png");
}});
} else {
System.out.println("圖片轉(zhuǎn)換失敗");
}
if (videoToBase64 != null) {
System.out.println("視頻轉(zhuǎn)換成功");
dataList.add(new HashMap<String, String>() {{
put("outPath", String.format("D:\\repo\\java_base_test\\static\\video\\cs_%s.mp4", new Date().getTime()));
put("base64Str", videoToBase64);
put("mimeType", "video/mp4");
}});
} else {
System.out.println("視頻轉(zhuǎn)換失敗");
}
return dataList;
}
/**
* Base64轉(zhuǎn)文件
* @param base64String Base64字符串
* @param filePath 輸出的文件路徑
* @param mimeType
* MIME類型:
* 視頻 video/mp4
* PNG: image/png
* JPEG: image/jpeg
* GIF: image/gif
* BMP: image/bmp
* WebP: image/webp
* @return
*/
public static boolean convertBase64ToFile(String base64String, String filePath, String mimeType) {
try {
// 將Base64編碼的字符串轉(zhuǎn)換為字節(jié)數(shù)組
byte[] fileBytes = Base64.getDecoder().decode(base64String);
// 創(chuàng)建文件頭信息
String header = "data:" + mimeType + ";base64,";
byte[] headerBytes = header.getBytes();
// 合并文件頭和文件內(nèi)容
byte[] combinedBytes = new byte[headerBytes.length + fileBytes.length];
System.arraycopy(headerBytes, 0, combinedBytes, 0, headerBytes.length);
System.arraycopy(fileBytes, 0, combinedBytes, headerBytes.length, fileBytes.length);
// 將字節(jié)數(shù)組寫入文件
Files.write(Paths.get(filePath), fileBytes);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* base64轉(zhuǎn)文件流程
* @param base64String
* @param filePath
*/
public static void base64ToFile(List<Map<String, String>> dataList) {
for (Map<String, String> resMap : dataList) {
boolean flag = convertBase64ToFile(resMap.get("base64Str"), resMap.get("outPath"), resMap.get("mimeType"));
if (flag) {
System.out.println(resMap.get("outPath") + " 轉(zhuǎn)化成功");
} else {
System.out.println(resMap.get("outPath") + " 轉(zhuǎn)化失敗");
}
}
}
public static void main(String[] args) {
// 文件轉(zhuǎn)Base64
List<Map<String, String>> dataList = fileToBase64();
// Base64轉(zhuǎn)文件
base64ToFile(dataList);
}
}
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot+Redis隊列實現(xiàn)Java版秒殺的示例代碼
本文主要介紹了SpringBoot+Redis隊列實現(xiàn)Java版秒殺的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
Spring中@Autowired和@Resource注解的使用區(qū)別詳解
這篇文章主要介紹了Spring中@Autowired和@Resource注解的使用區(qū)別詳解,@Autowired默認根據(jù)type進行注入,找到與指定類型兼容的?Bean?并進行注入,如果無法通過type匹配到對應(yīng)的?Bean?的話,會根據(jù)name進行匹配,如果都匹配不到則拋出異常,需要的朋友可以參考下2023-11-11
Spring實戰(zhàn)之使用靜態(tài)工廠方法創(chuàng)建Bean操作示例
這篇文章主要介紹了Spring實戰(zhàn)之使用靜態(tài)工廠方法創(chuàng)建Bean操作,結(jié)合實例形式分析了靜態(tài)工廠方法創(chuàng)建Bean的相關(guān)實現(xiàn)步驟與操作注意事項,需要的朋友可以參考下2019-11-11
Java應(yīng)用程序開發(fā)學(xué)習(xí)之static關(guān)鍵字應(yīng)用
今天小編就為大家分享一篇關(guān)于Java應(yīng)用程序開發(fā)學(xué)習(xí)之static關(guān)鍵字應(yīng)用,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
Java三種獲取redis的連接及redis_String類型演示(適合新手)
這篇文章主要介紹了Java三種獲取redis的連接及redis_String類型演示(適合新手),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12

