踩坑: base64 编码出现换行、==

本贴最后更新于 1984 天前,其中的信息可能已经沧海桑田

问题一:将文件用 base64 编码出现换行

转换代码如下

public static String pdfToBase64String(String filePath){
	FileInputStream input = null;
	ByteArrayOutputStream out = new ByteArrayOutputStream();
	BASE64Encoder encoder = new BASE64Encoder();
	try {
		File file = new File(filePath);
		input = new FileInputStream(file);
		StringBuilder buffer = new StringBuilder();
		byte[] temp = new byte[1024];
		for(int len = input.read(temp); len != -1;len = input.read(temp)){
		  out.write(temp, 0, len);
		  buffer.append(encoder.encode(out.toByteArray()));
		  out.reset();
		}
        return buffer.toString();
	 } catch (Exception e) {
        throw new RuntimeException(e);
	 } finally {
        try {
	  input.close();
	  out.close();
	} catch (IOException e) {
            e.printStackTrace();
	  }
    }
}

结果里有换行
imagepng

解决

这里 base64 转换使用的是 sun.misc.BASE64Encoder,在 byte 数组长度超过 56 时会自动添加换行
java.util.Base64org.apache.commons.codec.binary.Base64 就不会出现该问题。
参考资料: stackoverflow

问题二:分段编码时中间会出现==

imagepng

解决

base64 编码时如果长度不是 3 的倍数,多余的位置会用=补全
因此把分段长度设置为 3 的倍数即可
imagepng

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖
  • 一些有用的避坑指南。

    69 引用 • 93 回帖 • 2 关注
  • Base64
    9 引用 • 14 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...