HttpURLConnection.getInputStream直接读取会有数据丢失.所以要先转成InputStreamByteArray,然后再读取其中的数据
一开始在网上找的代码是这样的,结果传的图片总是一半,丢失数据.
private String getPic(String imageUrl) {
HttpURLConnection httpUrl = null;
URL url = null;
byte[] data = null;
try {
url = new URL(imageUrl);
httpUrl = (HttpURLConnection)url.openConnection();
httpUrl.connect();
InputStream inputStream = httpUrl.getInputStream();
data = new byte[inputStream.available()];
inputStream.read(data);
inputStream.close();
}
catch (IOException e) {
}
catch (ClassCastException e) {
}
finally {
try {
httpUrl.disconnect();
}
catch (NullPointerException e) {
}
}
// 对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);
}
先转成InputStreamByteArray,然后再读取其中的数据,就没有问题了
package com.gome.gop.data.entity.util;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.output.ByteArrayOutputStream;
import sun.misc.BASE64Encoder;
public class FileUtils {
/**
* 根据url获得文件,文件再转成字符串返回
* @param fileUrl
* @return
*/
public static String file2ByteStr(String fileUrl) {
HttpURLConnection conn = null;
URL url;
InputStream inputStream = null;
ByteArrayOutputStream output = null;
ByteArrayInputStream byteArrayInputStream = null;
byte[] data = null;
try {
url = new URL(fileUrl);
conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(20 * 1000);
inputStream = conn.getInputStream();
output = new ByteArrayOutputStream();
IOUtils.copy(inputStream, output);
byteArrayInputStream = new ByteArrayInputStream(output.toByteArray());
data = new byte[byteArrayInputStream.available()];
byteArrayInputStream.read(data);
}
catch (IOException e) {
}
finally {
try {
conn.disconnect();
inputStream.close();
output.close();
byteArrayInputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
// 对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
String result = encoder.encodeBuffer(data);
result = result.replaceAll("[\\s*\t\n\r]", "");
return result;
}
}