为了账号安全,请及时绑定邮箱和手机立即绑定

java图片转base64和真实的结果不一样

java图片转base64和真实的结果不一样

慕勒3428872 2019-03-01 11:10:09
先上代码 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还长了很多。 为什么会这样呢?
查看完整描述

4 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

InputStream 的 available() 返回的值是该InputStream 在不被阻塞的情况下,一次可以读取到的数据长度。但网络情况总是不定的,经常阻塞。所以建议使用循环读取 InputStream 中的数据。

查看完整回答
反对 回复 2019-03-01
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

读取整个InputStream时,用Streams.copy()比稳妥,例如题主这个例子中,可以是:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
Streams.copy(conn.getInputStream(), baos);
String str = new BASE64Encoder(baos.toByteArray());
查看完整回答
反对 回复 2019-03-01
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

 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,就好了

查看完整回答
反对 回复 2019-03-01
  • 4 回答
  • 0 关注
  • 2367 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信