先上代碼
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還長了很多。
為什麼會這樣呢?
InputStream 的 available() 傳回的值是該InputStream 在不被阻塞的情況下,一次可以讀取到的資料長度。但網路情況總是不定的,常常阻塞。所以建議使用循環讀取 InputStream 中的資料。
讀取整個
InputStream
时,用Streams.copy()
比穩,例如題主這個例子中,可以是:然而樓主的程式碼是可以用的,在我這裡,只要加上data:image/jpg;base64,就好了