zoukankan      html  css  js  c++  java
  • Java中处理接口返回base64编码的图片数据

      在做接口测试的时候,某些接口返回的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相关的类了。

  • 相关阅读:
    关于键盘事件对象code值
    解决父元素定位后宽度不随着子元素增大而增大的问题
    绝对定位后元素的宽高如果用百分比表示的计算方法
    4.7做作业时发现,内联元素设置宽高背景以后正常不显示,但是设置了position:absolute;以后就可以显示了。起到了和display:block;一样的效果。然后查了一下知道了。
    react-native中显示本地照片或视频
    用js实现div元素的拖拽、
    TCP协议浅谈
    TCP的三次握手和四次挥手
    TCP协议
    关于this指向的一点小分享
  • 原文地址:https://www.cnblogs.com/generalli2019/p/11465132.html
Copyright © 2011-2022 走看看