java實現後臺處理base64圖片還原為文件
後臺處理base64圖片還原為文件
/** * 將base64圖片解析成文件存放本地 * @param imgStr * @return 本地臨時文件的地址 */ private static String generateImage(String imgStr){ if(Strings.isNullOrEmpty(imgStr)){ return null; } BASE64Decoder decoder = new BASE64Decoder(); //轉換前端數據 imgStr = imgStr.replaceAll(" ", "+"); //去除多餘部分 imgStr=imgStr.replace("data:image/png;base64,", ""); try { // Base64解碼 byte[] b = decoder.decodeBuffer(imgStr); for (int i = 0; i < b.length; i++) { if (b[i] < 0) {// 調整異常數據 b[i] += 256; } } String filepath =System.getProperty("java.io.tmpdir") +"測試"+System.currentTimeMillis()+".png"; File file = new File(filepath); if(file.exists()){ file.delete(); } FileOutputStream fos = new FileOutputStream(file); fos.write(b); fos.flush(); fos.close(); logger.info("路徑"+filepath); return filepath; }catch(Exception e){ return null; } }
//imgStr=imgStr.replace(“data:image/png;base64,”, “”); 關鍵地方 根據圖片類型 過濾對應的類型
java Base64解析
最近在業務場景中,需要對第三方傳遞進來的字符進行base64解密,根據第三方文檔提供的解析工具,對數據進行瞭解析
關於Base64的解析方式如下
String sign = "xxxxxxxxxxxxxxxxxxxxxxxx"; sun.misc.BASE64Decoder decode = new sun.misc.BASE64Decoder(); String json = new String(decode.decodeBuffer(sign));
使用sun.misc.BASE64Decoder對數據解析,放測試環境測試發現解析出來的字符串正確無誤,
但是在上線之後,根據第三方傳遞的sign,解析出來之後發現字符串最後多瞭一個字符 “7”,查詢邏輯 沒有發現問題,最後猜測是sun.misc.BASE64Decoder出瞭問題,於是換瞭Base64的解析jira
使用如下代碼解析
String sign = "xxxxxxxxxxxxxxxxxxxxxxxxx"; Base64 base64 = new Base64(); String json = new String (base64.decodeBase64(sign.getBytes()));
發現返回json中數據正常,問題解決。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- JAVA實現Base64編碼的三種方式
- java中Base64編碼原理實例講解
- vue後臺返回base64圖片無法顯示的解決
- java必懂的冷知識點之Base64加密與解密
- Java I/O流使用示例詳解