我有一个url图片地址,需要将他base64编码然后传给另一个服务,我本地一直是可以,将程序上传到linux服务器中一直发现图片出不来,看了下日志,base64编码后发现出来的数据多了换行符,如下:

地址:

kv://kv-face-video_face/2020/03/31/11/24/hmfdq-5439232d-8ab2-4403-8882-6b1d90fbeaee-1585625075325-1017433

base编码后值:

a3Y6Ly9rdi1mYWNlLXZpZGVvX2ZhY2UvMjAyMC8wMy8zMS8xMS8yNC9obWZkcS01NDM5MjMyZC04
YWIyLTQ0MDMtODg4Mi02YjFkOTBmYmVhZWUtMTU4NTYyNTA3NTMyNS0xMDE3NDMz

多了个换行。。

看了工具类下的base编码的方法:

    public static String byteArrayToBase64Str(byte[] data) {
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(data).replaceAll("\r\n", "");
    }

用的是 sun. misc. BASE64Encoder进行编码,这个类base64编码后的值会带上换行符,windows下换行符与linux中不一样,windows \r\n ,linux中\n,于是就出现了我本地行,linux中运行出错了。具体原理,查看

点击打开链接


于是修改了上面的工具类方法:

    /**
     * base64加密,并处理换行符的问题
     * @param data
     * @return
    public static String byteArrayToBase64Str(byte[] data) {
        BASE64Encoder encoder = new BASE64Encoder();
        String encode = encoder.encode(data);
        encode = encode.replaceAll("\r\n", "");
        encode = encode.replaceAll("\r", "");
        encode = encode.replaceAll("\n", "");
        return encode;
    }

或者换用Apache的 commons-codec.jar, Base64.encodeBase64String(byte[])

  • java中jsoup解析爬虫获取的页面html数据,轻松实现一个爬虫 (2852)
  • idea类找不到问题Caused by: java.lang.NoClassDefFoundError (3690)
  • java通过域名获取域名的IP地址 (1116)
  • 阿里巴巴p3c代码规范eclipse插件 (1156)
  • 线程安全测试 ArrayList Collections.synchronizedList CopyOnWriteArrayList (1121)
  • bootstrap.yml配置报错:Could not resolve placeholder 'xx' in value (6458)
  • 切分List集合为多个List集合 (7073)
  • QLExpress在脚本中执行Java代码 (1623)
  • ThreadLocal正确使用姿势,避免再掉坑 (842)
  • 使用spring4实现websocket连接 (2536)
  • Parameter index out of range (1 > number of parameters, which is 0 (1305)
  • spring cloud+feign+mybatis中使用seata0.9实现分布式事务 (6428)
  • spring cloud gateway报错Only one connection receive subscriber allowed (4644)
  • spring cloud中Feign调用诡异报错MethodNotAllowed: status 405 reading (8276)
  • elasticsearch7.1保存时报错: Validation Failed: 1: type is missing; (10255)
  • 聊聊数据保存到MySQL后数据乱码的问题 (1446)
  • jquery对象与dom对象互转 (1381)
  • linux使用epel源yum安装iftop、nload、nginx等 (3291)
  • linux下nginx安装其他模块 (2041)
  • java stream去重的几种方式 (39832)
  • the dependencies of some of the beans in the application context form a cycle (13881)
  • java enum枚举转list和Map (8928)
  • 解决mybatis打印查询结果集造成太多日志的问题 (8565)
  • java stream List转Map与List转List与Map转List以及List 转Map (8036)
  • ServletRequest转HttpServletRequest设置header之后取不到header的问题 (7806)
  • java中BufferedImage转成 base64字符串 (7755)
  • 切分List集合为多个List集合 (7073)
  • maven修改jar包版本不生效解决办法 (6489)
  • bootstrap.yml配置报错:Could not resolve placeholder 'xx' in value (6458)
  • ClassInstance博客是个人java技术博客,用它记录自己的技术成长,分享我的java开发历程,学到的东西就要与大家分享,欢迎java开发者们与我交流,共同进步,有问题可以用邮箱给我的留言,也可以加我QQ:1196365905,有空我会第一时间回复

    友情链接:

    ICP备案:闽ICP备17026619号-2