在做接口测试的时候,某些接口返回的content是一大段加密文字。这种情况下,有可能是返回的图片加密数据,需要将这些数据转换成图片进行保存查看。

例如:

  

  这里,可以看到Content对应的键值开头有“data:image/jpeg;base64,”的字样。我们可以简单的认为,这是个jpeg格式的图片,而且经过base64的编码。

  通过JPath,我们可以直接取到Content的返回内容,然后去掉前面的“data:image/jpeg;base64,”就是实际的返回数据。

//取得返回json中的Content数据
String content = JSONPath.read(json, "$.Content").toString());
//去掉前面的“data:image/jpeg;base64,”的字样
String imgdata = content.replace("data:image/jpeg;base64,","")
//解码base64
BASE64Decoder decoder = new BASE64Decoder();
byte[] data = decoder.decodeBuffer(imgdata);
for(int i =0 ; i < data.length ;i++) {
if(data[i] < 0) {
data[i] += 256;
}
}
//写入保存成jpeg文件
FileOutputStream fos = new FileOutputStream ("D:\\test.jpg");
fos.write(data);
fos.flush();
fos.close();

  当然,有解码也会有加编码。如果我们想把一个图片文档加编码成base64,可以参考以下代码:

public static String getImageStr(String imgFile) {
InputStream inputStream = null;
byte[] data = null;
try {
inputStream = new FileInputStream(imgFile);
data = new byte[inputStream.available()];
inputStream.read(data);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
// 加编码
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);
}

  这样即可将图片转换成base64编码的字符串。

  如果直接使用上面的代码,应该是不能成功的。原因在于,Base64的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder的sun.misc.BASE64Encoder/BASE64Decoder类。

  这个类是sun公司的内部方法,并没有在java api中公开过,不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用。但是在Eclipse中直接使用,却找不到该类。解决方法如下:

  1.右键项目--》Build Path --》Configure Build Path

  选择Libraries,点击JRE System Library,选择 Access rules,如果之前没有定义规则,会显示No rules defined

  2. Access rules,点击Edit --》Add,然后点击Ok

  3.在Resolution下拉列表框中选择Accessible,Rule Pattern 选择**,依次点击ok

 

  经过这样的操作了之后,我们就可以顺利的使用Base64相关的类了。

Java中处理接口返回base64编码的图片数据的更多相关文章

  1. javascript将base64编码的图片数据转换为file并提交

    /** @param base64Codes 图片的base64编码 */ function sumitImageFile(base64Codes){ var form=document.forms[ ...

  2. (转载)javascript将base64编码的图片数据转换为file并提交

    /** * @param base64Codes * 图片的base64编码 */ function sumitImageFile(base64Codes){ var form=document.fo ...

  3. java中产品分类返回给前台页面 后台数据组装

    public ResultBean getSpfl(Integer yyb) { ResultBean res = new ResultBean(); try { JSONArray data = n ...

  4. 在C#中通过使用Newtonsoft.Json库来解析百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据

    百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据,如下所示: http://api.map.baidu.com/geocoding/v3/?address=**省**市**区**路 ...

  5. BASE64编码的图片在网页中的显示问题的解决

    BASE64位转码有两种: 一种是图片转为Base64编码,这种编码是直接可以在页面通过<img src='base64编码'/>的方式显示 Base64 在CSS中的使用 .demoIm ...

  6. Java Base64编码与图片互转

    import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...

  7. 第五节:详细讲解Java中的接口与继承

    前言 大家好,给大家带来详细讲解Java中的接口与继承的概述,希望你们喜欢 什么是接口(interface) 接口中的方法都是抽象方法,public权限,全是抽象函数,不能生成对象 interface ...

  8. java中map接口hashMap以及Enty之间的用法和关系

    java中map接口hashMap以及Enty之间的转换 首先说的是map接口: Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value ...

  9. Java学习笔记二十八:Java中的接口

    Java中的接口 一:Java的接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承 ...

随机推荐

  1. 【SSH进阶之路】Hibernate映射——一对多关联映射(七)

    上上篇博文[SSH进阶之路]Hibernate映射——一对一单向关联映射(五),我们介绍了一对一的单向关联映射,单向是指只能从人(Person)这端加载身份证端(IdCard),但是反过来,不能从身份 ...

  2. Github-Dorks与辅助工具

    前言 Github搜索功能非常强大且有用,可用于在开源出来的Github仓库中搜索敏感数据.可以找到敏感的个人和/或组织信息(例如私钥,凭据,身份验证令牌等). 文中的github dork列表可以在 ...

  3. java的Array和List相互转换

    1.Array转List,通过java.util.Arrays.asList(T... a)参数是可变泛型参数 注意,Arrays.asList返回的类型是不可变长度的集合,底层是final修饰的泛型 ...

  4. TCP/IP学习笔记14--IP地址 之 全局地址,私有地址

    只要明天还在,我就不会悲哀,冬雪终会悄悄融化,春雷定将滚滚而来.----<只要明天还在>,汪国真 全局地址,私有地址 , 一种为解决IP地址不足而产生的技术. 起初 ,互联网中的任何一台主 ...

  5. Dev c++编译报错

    https://blog.csdn.net/qq_37521610/article/details/87640513

  6. 切换 Python2 Python3

    sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 sudo update-alternati ...

  7. Windows连接已有界面的Ubuntu Linux

    Windows连接已有界面的Ubuntu Linux xrdp方式windows 10连接ubuntu 18.04 LTS 1. Ubuntu设置 Ubuntu的设置->Sharing项修改为下 ...

  8. python 之 Django框架(Django框架简介、视图装饰器、request对象、Response对象)

    12.33 Django框架简介: MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器( ...

  9. Python 运算符 各类运算符总结

    运算符详解2.1.算术运算符2.2.比较(关系)运算符2.3.赋值运算符2.4.逻辑运算符2.5.位运算符2.6.成员运算符2.7.身份运算符三.重要运算符说明3.1.join和符号”+“区别3.2. ...

  10. nRF24L01/nRF24L01+应用总结

    nRF24L01+是nRF24L01的升级款,比较显眼的区别是nRF24L01+比nRF24L01多了一个250Kbps传输速率.其它的还有接收模式官方给的耗电量是不一样的.个别寄存器名字不一样. 接 ...