Java中處理接口返回base64編碼的圖片數據


  在做接口測試的時候,某些接口返回的content是一大段加密文字。這種情況下,有可能是返回的圖片加密數據,需要將這些數據轉換成圖片進行保存查看。

例如:

  

 

 

   這里,可以看到Content對應的鍵值開頭有“data:image/jpeg;base64,”的字樣。我們可以簡單的認為,這是個jpeg格式的圖片,而且經過base64的編碼。

  通過JPath,我們可以直接取到Content的返回內容,然后去掉前面的“data:image/jpeg;base64,”就是實際的返回數據。

//取得返回json中的Content數據
String content = JSONPath.read(json, "$.Content").toString());
//去掉前面的“data:image/jpeg;base64,”的字樣 String imgdata
= content.replace("data:image/jpeg;base64,","") //解碼base64 BASE64Decoder decoder = new BASE64Decoder(); byte[] data = decoder.decodeBuffer(imgdata); for(int i =0 ; i < data.length ;i++) { if(data[i] < 0) { data[i] += 256; } }
//寫入保存成jpeg文件 FileOutputStream fos
= new FileOutputStream ("D:\\test.jpg"); fos.write(data); fos.flush(); fos.close();

  當然,有解碼也會有加編碼。如果我們想把一個圖片文檔加編碼成base64,可以參考以下代碼:

public static String getImageStr(String imgFile) {
    InputStream inputStream = null;
    byte[] data = null;
    try {
        inputStream = new FileInputStream(imgFile);
        data = new byte[inputStream.available()];
        inputStream.read(data);
        inputStream.close();
      } catch (IOException e) {
        e.printStackTrace();
    }
// 加編碼
    BASE64Encoder encoder = new BASE64Encoder();
    return encoder.encode(data);
}

  這樣即可將圖片轉換成base64編碼的字符串。

  如果直接使用上面的代碼,應該是不能成功的。原因在於,Base64的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder的sun.misc.BASE64Encoder/BASE64Decoder類。

  這個類是sun公司的內部方法,並沒有在java api中公開過,不屬於JDK標准庫范疇,但在JDK中包含了該類,可以直接使用。但是在Eclipse中直接使用,卻找不到該類。解決方法如下:

  1.右鍵項目--》Build Path --》Configure Build Path

  選擇Libraries,點擊JRE System Library,選擇 Access rules,如果之前沒有定義規則,會顯示No rules defined

 

   2. Access rules,點擊Edit --》Add,然后點擊Ok

 

   3.在Resolution下拉列表框中選擇Accessible,Rule Pattern 選擇**,依次點擊ok

 

  

 

  經過這樣的操作了之后,我們就可以順利的使用Base64相關的類了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM