在做接口测试的时候,某些接口返回的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. [LeetCode] 96. Unique Binary Search Trees 唯一二叉搜索树

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  2. [LeetCode] 236. Lowest Common Ancestor of a Binary Tree 二叉树的最近公共祖先

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...

  3. [LeetCode] 801. Minimum Swaps To Make Sequences Increasing 最少交换使得序列递增

    We have two integer sequences A and B of the same non-zero length. We are allowed to swap elements A ...

  4. php实用功能小记

    1.任意数目的参数 function fun(){ $args = func_get_args(); foreach ($args as $k => $v) { echo "arg&q ...

  5. Javaspring+mybit+maven中实现定时任务

    背景:在Javaspring中,定时的启动某一个任务时,使用@Scheduled来实现 Javaspring工程创建好之后,直接创建下面的class文件即可.具体的用法可参照 https://www. ...

  6. python3 turtle

    一.turtle 1.操控画笔画图,turtle相当于笔头(x头?),有方向 2.https://docs.python.org/3.6/library/turtle.html 二.移动和绘制 imp ...

  7. PHP设计模式 - 模板方法模式

    模板模式准备一个抽象类,将部分逻辑以具体方法以及具体构造形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.先制定一个顶级 ...

  8. 06 BootStrap前端开发框架(超级好用)

    1.BootStrap概念: 一个前端开发的框架,Bootstrap,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JavaScript 的,它简洁灵活 ...

  9. C语言中的共用体(union)和枚举(enum)

    1 union union Data{ int i; char ch; float f; }a={1, 'a', 1.5}; //错误 union Data a = {16}; //正确 union ...

  10. nRF24L01P数据传输速率

    项目要用nRF24L01P做语音的传输,数据量可想而知. 发送端按照8KHz/s采样率,每次采样双声道,16位深度(2Bytes). 数据量算一下就是8000x2x2=32000(Bytes) nRF ...