先上代碼
String imgURL = "http://www.g3zj.net:8082/util.action?method=appauthimg&d_=99";
byte[] data = null;
try {
// 創(chuàng)建URL
URL url = new URL(imgURL);
// 創(chuàng)建鏈接
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();
}
// 對(duì)字節(jié)數(shù)組Base64編碼
BASE64Encoder encoder = new BASE64Encoder();
str=encoder.encode(data);
就是從一個(gè)網(wǎng)絡(luò)讀取圖片并轉(zhuǎn)成base64.發(fā)現(xiàn)轉(zhuǎn)出來(lái)的結(jié)果無(wú)法用于img標(biāo)簽顯示(已加了data:image/jpeg;base64,前綴)。后來(lái)直接百度找了一個(gè)在線生成base64的網(wǎng)站,把這個(gè)圖片url放上去轉(zhuǎn)換,結(jié)果發(fā)現(xiàn)別人在線轉(zhuǎn)換出來(lái)的base64比我java代碼轉(zhuǎn)換的base64還長(zhǎng)了很多。
為什么會(huì)這樣呢?
4 回答

慕斯王
TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊
InputStream 的 available() 返回的值是該InputStream 在不被阻塞的情況下,一次可以讀取到的數(shù)據(jù)長(zhǎng)度。但網(wǎng)絡(luò)情況總是不定的,經(jīng)常阻塞。所以建議使用循環(huán)讀取 InputStream 中的數(shù)據(jù)。

子衿沉夜
TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
讀取整個(gè)InputStream
時(shí),用Streams.copy()
比穩(wěn)妥,例如題主這個(gè)例子中,可以是:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Streams.copy(conn.getInputStream(), baos);
String str = new BASE64Encoder(baos.toByteArray());

寶慕林4294392
TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊
String imgURL = "http://www.g3zj.net:8082/util.action?method=appauthimg&d_=99";
ByteArrayOutputStream data = new ByteArrayOutputStream();
try {
// 創(chuàng)建URL
URL url = new URL(imgURL);
byte[] by = new byte[1024];
// 創(chuàng)建鏈接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5 * 1000);
InputStream is = conn.getInputStream();
// 將內(nèi)容讀取內(nèi)存中
int len = -1;
while ((len = is.read(by)) != -1) {
data.write(by, 0, len);
}
// 關(guān)閉流
is.close();
} catch (IOException e) {
e.printStackTrace();
}
// 對(duì)字節(jié)數(shù)組Base64編碼
BASE64Encoder encoder = new BASE64Encoder();
System.out.println("data:image/jpg;base64,"+encoder.encode(data.toByteArray()));
然而樓主的代碼是可以用的,在我這里,只要加上data:image/jpg;base64,就好了
添加回答
舉報(bào)
0/150
提交
取消