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。

推薦閱讀: