java圖片轉base64和真實的結果不一樣
問題描述
先上代碼
String imgURL = 'http://www.g3zj.net:8082/util.action?method=appauthimg&d_=99';byte[] data = null;try { // 創建URL URL url = new URL(imgURL); // 創建鏈接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod('GET'); conn.setConnectTimeout(5 * 1000); InputStream inStream = conn.getInputStream(); data = new byte[inStream.available()]; inStream.read(data); inStream.close();} catch (IOException e) { e.printStackTrace();}// 對字節數組Base64編碼BASE64Encoder encoder = new BASE64Encoder();str=encoder.encode(data);
就是從一個網絡讀取圖片并轉成base64.發現轉出來的結果無法用于img標簽顯示(已加了data:image/jpeg;base64,前綴)。后來直接百度找了一個在線生成base64的網站,把這個圖片url放上去轉換,結果發現別人在線轉換出來的base64比我java代碼轉換的base64還長了很多。
為什么會這樣呢?
問題解答
回答1:InputStream 的 available() 返回的值是該InputStream 在不被阻塞的情況下,一次可以讀取到的數據長度。但網絡情況總是不定的,經常阻塞。所以建議使用循環讀取 InputStream 中的數據。
回答2:讀取整個InputStream時,用Streams.copy()比穩妥,例如題主這個例子中,可以是:
ByteArrayOutputStream baos = new ByteArrayOutputStream();Streams.copy(conn.getInputStream(), baos);String str = new BASE64Encoder(baos.toByteArray());回答3:
String imgURL = 'http://www.g3zj.net:8082/util.action?method=appauthimg&d_=99';ByteArrayOutputStream data = new ByteArrayOutputStream();try { // 創建URL URL url = new URL(imgURL); byte[] by = new byte[1024]; // 創建鏈接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod('GET'); conn.setConnectTimeout(5 * 1000); InputStream is = conn.getInputStream(); // 將內容讀取內存中 int len = -1; while ((len = is.read(by)) != -1) {data.write(by, 0, len); } // 關閉流 is.close();} catch (IOException e) { e.printStackTrace();}// 對字節數組Base64編碼BASE64Encoder encoder = new BASE64Encoder();System.out.println('data:image/jpg;base64,'+encoder.encode(data.toByteArray()));
然而樓主的代碼是可以用的,在我這里,只要加上data:image/jpg;base64,就好了
相關文章:
1. docker-compose 為何找不到配置文件?2. boot2docker無法啟動3. docker images顯示的鏡像過多,狗眼被亮瞎了,怎么辦?4. java中返回一個對象,和輸出對像的值,意義在哪兒5. android - E/dalvikvm: Could not find class java.nio.file.Path,6. python - linux怎么在每天的凌晨2點執行一次這個log.py文件7. android - 哪位大神知道java后臺的api接口的對象傳到前端后輸入日期報錯,是什么情況?求大神指點8. mysql數據庫每次查詢是一條線程嗎?9. python是怎么實現過濾 #注釋代碼的?10. 請問一下各位老鳥 我一直在學習獨孤九賤 現在是在tp5 今天發現 這個系列視頻沒有實戰
