你这个问题我今天遇到,排查了一上午,最后发现图片url请求返回的数据是gzip格式,在base64编码前要gzip解码,再进行base64编码。

浏览器上看到的返回头信息

Age:2829

Connection:keep-alive

Content-Encoding:gzip

Content-Type:image/jpeg

Date:Fri, 28 Sep 2018 02:29:54 GMT

EagleId:790b009515381046232548971e

ETag:"5aefed0a-3a1e"

Last-Modified:Mon, 07 May 2018 06:07:06 GMT

Server:Tengine

Timing-Allow-Origin:*

Via:cache20.l2st3-2[0,304-0,H], cache29.l2st3-2[15,0], kunlun8.cn2372[0,304-0,H], kunlun1.cn2372[1,0]

X-Cache:HIT TCP_IMS_HIT dirn:10:228113073

第三行Content-Encoding:gzip

正确的代码

/**

* 在线图片转换成base64字符串

*

* @param imgURL 图片线上路径

* @return

*/

public static String ImageToBase64ByOnline(String imgURL) {

if (StringUtils.isBlank(imgURL)) {

return null;

}

HttpURLConnection conn = null;

InputStream is = null;

try {

ByteArrayOutputStream out = new ByteArrayOutputStream();

// 创建URL

URL url = new URL(imgURL);

// 创建链接

conn = (HttpURLConnection) url.openConnection();

conn.setRequestMethod("GET");

conn.setConnectTimeout(5000);

is = conn.getInputStream();

// 将内容读取内存中

int len = -1;

byte[] by = new byte[1024];

while ((len = is.read(by)) != -1) {

out.write(by, 0, len);

}

byte[] dataByte = out.toByteArray();

//如果 图片经过nginx就会被压缩,返回头中包含 Content-Encoding:gzip 则需要对图片数据解压缩

String contentEncoding = conn.getContentEncoding();

if("gzip".equalsIgnoreCase(contentEncoding)){

dataByte = GZIPUtils.uncompress(dataByte);

}

// 对字节数组Base64编码

BASE64Encoder encoder = new BASE64Encoder();

return encoder.encode(dataByte);

} catch (IOException e) {

e.printStackTrace();

} finally {

if (is != null) {

// 关闭流

try {

is.close();

} catch (IOException e) {

e.printStackTrace();

} finally {

is = null;

}

}

if (conn != null) {

conn.disconnect();

}

}

return null;

}

gzip解码工具

/**

* GZIP解压缩

*

* @param bytes 压缩内容

* @return

*/

public static byte[] uncompress(byte[] bytes) throws IOException {

if (bytes == null || bytes.length == 0) {

return null;

}

ByteArrayOutputStream out = new ByteArrayOutputStream();

GZIPInputStream ungzip = null;

try {

ByteArrayInputStream in = new ByteArrayInputStream(bytes);

ungzip = new GZIPInputStream(in);

byte[] buffer = new byte[1024];

int n = 0;

while ((n = ungzip.read(buffer)) >= 0) {

out.write(buffer, 0, n);

}

ungzip.close(); //这个会写入一些数据,所以要在out使用前调用

return out.toByteArray();

} finally {

out.close();

}

}

网络图片 base64 java_java图片转base64和真实的结果不一样相关推荐

  1. uni-app 多端本地图片转base64 本地图片转base64

    文章目录 uni 适配多端 本地图片转base64 函数 多端转换统一函数 使用 h5本地图片转base64 app本地图片转base64 微信小程序本地图片转base64 uni 适配多端 本地图片 ...

  2. JAVA 将图片转换为Base64编码

    https://www.cnblogs.com/ywlx/p/4544179.html 这里使用的jar包是commons-codec-1.10.jar; import java.io.FileInp ...

  3. 改变base64加密图片的大小

    1.添加依赖 <!-- 图片缩略图 --><dependency><groupId>net.coobird</groupId><artifactI ...

  4. python将图片转换为base64

    脚本转换 # 二进制方式打开图片文件 import base64f = open(r"C:\Users\Admin\Desktop\新建文件夹 (2)\Snipaste_2022-09-03 ...

  5. c# 图片 与 Base64 互转

    图片转Base64 Base64转图片 /// <summary>/// base64 转 Image/// </summary>/// <param name=&quo ...

  6. VUE Base64编码图片展示与转换图片

    VUE Base64编码图片展示与转换图片 VUE Base64编码图片展示与转换图片 VUE Base64编码图片展示 Base64编码转换图片 文件转换base64编码 更便捷的图片转化Base6 ...

  7. java编写之jpg图片与base64编码之间的转换

    /** * @author zyq * 将网络图片进行Base64位编码 * @param imgUrl * */ public static String encodeWebImageToBase6 ...

  8. java图片转成字符串_JAVA将图片(本地或者网络资源)转为Base64字符串,将base64字符串存储为本地图片...

    网络资源代码 import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOExcep ...

  9. uni-app 压缩图片(base64上传)包含图片验证

    第一步选择图片 data(){return{imageType: ['image/png', 'image/jpeg', 'image/jpg'],//图片验证类型} }uni.chooseImage ...

最新文章

  1. java 随机数 平均值_从平均值,变异系数生成对数正态分布随机数
  2. Linux在线求助 man page
  3. php lang无效,详解 Go 中的不可变类型
  4. 回滚master代码_[转]Git 代码撤销、回滚到任意版本(当误提代码到本地或master分支时)...
  5. vue项目中的遇错:Invalid Host header
  6. python入门与实践在线阅读_Python编程:从入门到实践(第2版)
  7. java字符连接字符串数组_Java中连接字符串的最佳方法
  8. python画建筑分析图_教你用GH绘制酷炫的流线分析图
  9. 基于ARQ反馈的无人机通信中继自主选择研究
  10. 设计师社区网站-交流、学习、展示
  11. python下载bt文件_python获取bt种子的详细信息
  12. Kylin Cube构建优化
  13. 运输层(UDP)详解(一)
  14. 安居客头部买房部分书写
  15. (转)黑手安全网QQ工具箱第三版 黑手一周年纪念版!
  16. antd 日期组件出现了英文
  17. 聚名商学院:近六百元在聚名网抢注域名,两年不到卖了八万八千八百八十八元,这就是域名投资的魅力!
  18. crm系统价格多少?
  19. JAVA计算机毕业设计自习室预订系统Mybatis+系统+数据库+调试部署
  20. pg与msql的数据库调研对比分析

热门文章

  1. 数据图表与分析图_史上最全最实用的数据可视化分析图表制作工具汇总
  2. php 服务定位,服务定位器(Service Locator)
  3. springboot 日志级别_SpringBoot实战(十三):Admin动态修改日志级别
  4. linux 下安装fbprophet
  5. python在电脑哪可以找到_哪里可以找到比较靠谱的Python教程?
  6. python读取配置文件存在某配置_Python读取ini配置文件的方式
  7. python库怎么绘画_[雪峰磁针石博客]python绘图作业:使用pygame库画房子
  8. 桌面计算机安全策略,设置组策略实现Windows桌面显示计算机信息
  9. OpenGL ES 3.2
  10. Angularjs 观察者模式 理解