生成的工具用的是freemarker模板,利用word转换xml改后缀名生成ftl 模式。
问题:个别图片显示不全或者显示失败
图片显示失败 图片显示不全出现问题的代码:
InputStream in=null;
if(flag) {//获取远程图片
//new一个URL对象
URL url = new URL(path);
//打开链接
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//设置请求方式为"GET"
conn.setRequestMethod("GET");
//超时响应时间为5秒
// conn.setConnectTimeout(5 * 1000);
//通过输入流获取图片数据
in = conn.getInputStream();
}else {//获取本地图片
File file = new File(path);
in = new FileInputStream(file);
}
byte[] data = null;
data = new byte[in.available()]; //=======问题:InputStream 的 available() 返回的值是该InputStream 在不被阻塞的情况下,一次可以读取到
// 的数据长度。但网络情况总是不定的,经常阻塞。
in.read(data);
in.close();
BASE64Encoder encoder = new BASE64Encoder();
String base64 = encoder.encode(data);
解决办法:循环读取 InputStream 中的数据。
ByteArrayOutputStream data = new ByteArrayOutputStream();
URL url = new URL(path);
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();
BASE64Encoder encoder = new BASE64Encoder();
String base64 = encoder.encode(data.toByteArray());
网友评论