网络图片 base64 java_java图片转base64和真实的结果不一样
你这个问题我今天遇到,排查了一上午,最后发现图片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和真实的结果不一样相关推荐
- uni-app 多端本地图片转base64 本地图片转base64
文章目录 uni 适配多端 本地图片转base64 函数 多端转换统一函数 使用 h5本地图片转base64 app本地图片转base64 微信小程序本地图片转base64 uni 适配多端 本地图片 ...
- JAVA 将图片转换为Base64编码
https://www.cnblogs.com/ywlx/p/4544179.html 这里使用的jar包是commons-codec-1.10.jar; import java.io.FileInp ...
- 改变base64加密图片的大小
1.添加依赖 <!-- 图片缩略图 --><dependency><groupId>net.coobird</groupId><artifactI ...
- python将图片转换为base64
脚本转换 # 二进制方式打开图片文件 import base64f = open(r"C:\Users\Admin\Desktop\新建文件夹 (2)\Snipaste_2022-09-03 ...
- c# 图片 与 Base64 互转
图片转Base64 Base64转图片 /// <summary>/// base64 转 Image/// </summary>/// <param name=&quo ...
- VUE Base64编码图片展示与转换图片
VUE Base64编码图片展示与转换图片 VUE Base64编码图片展示与转换图片 VUE Base64编码图片展示 Base64编码转换图片 文件转换base64编码 更便捷的图片转化Base6 ...
- java编写之jpg图片与base64编码之间的转换
/** * @author zyq * 将网络图片进行Base64位编码 * @param imgUrl * */ public static String encodeWebImageToBase6 ...
- java图片转成字符串_JAVA将图片(本地或者网络资源)转为Base64字符串,将base64字符串存储为本地图片...
网络资源代码 import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOExcep ...
- uni-app 压缩图片(base64上传)包含图片验证
第一步选择图片 data(){return{imageType: ['image/png', 'image/jpeg', 'image/jpg'],//图片验证类型} }uni.chooseImage ...
最新文章
- java 随机数 平均值_从平均值,变异系数生成对数正态分布随机数
- Linux在线求助 man page
- php lang无效,详解 Go 中的不可变类型
- 回滚master代码_[转]Git 代码撤销、回滚到任意版本(当误提代码到本地或master分支时)...
- vue项目中的遇错:Invalid Host header
- python入门与实践在线阅读_Python编程:从入门到实践(第2版)
- java字符连接字符串数组_Java中连接字符串的最佳方法
- python画建筑分析图_教你用GH绘制酷炫的流线分析图
- 基于ARQ反馈的无人机通信中继自主选择研究
- 设计师社区网站-交流、学习、展示
- python下载bt文件_python获取bt种子的详细信息
- Kylin Cube构建优化
- 运输层(UDP)详解(一)
- 安居客头部买房部分书写
- (转)黑手安全网QQ工具箱第三版 黑手一周年纪念版!
- antd 日期组件出现了英文
- 聚名商学院:近六百元在聚名网抢注域名,两年不到卖了八万八千八百八十八元,这就是域名投资的魅力!
- crm系统价格多少?
- JAVA计算机毕业设计自习室预订系统Mybatis+系统+数据库+调试部署
- pg与msql的数据库调研对比分析
热门文章
- 数据图表与分析图_史上最全最实用的数据可视化分析图表制作工具汇总
- php 服务定位,服务定位器(Service Locator)
- springboot 日志级别_SpringBoot实战(十三):Admin动态修改日志级别
- linux 下安装fbprophet
- python在电脑哪可以找到_哪里可以找到比较靠谱的Python教程?
- python读取配置文件存在某配置_Python读取ini配置文件的方式
- python库怎么绘画_[雪峰磁针石博客]python绘图作业:使用pygame库画房子
- 桌面计算机安全策略,设置组策略实现Windows桌面显示计算机信息
- OpenGL ES 3.2
- Angularjs 观察者模式 理解