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. 为什么span的color非要内联样式才起作用?2. docker - 如何修改运行中容器的配置3. css - div设置float:left后高度设置自动会无效 ?4. 求大神指点js修改margintop导致无限下滑的问题5. linux - centos 配置ip?6. 求救一下,用新版的phpstudy,数据库过段时间会消失是什么情况?7. 老师,请问我打开browsersync出现这个问题怎么解决啊?8. 请问一下各位老鸟 我一直在学习独孤九贱 现在是在tp5 今天发现 这个系列视频没有实战9. 在cmd下进入mysql数据库,可以输入中文,但是查看表信息,不显示中文,是怎么回事,怎新手,请老师10. html5 - H5做的手机分享页微信更新后,分享出去不再默认显示第一个图 作为缩略图

网公网安备