已知Base64编码字符串如何得知实际文件的大小?

原创 野人  2022-01-12 23:18  阅读 82 次

哇哦,又学习到了新知识啦,之前用到Base64最多的地方就是把项目中的小图片转为Base64,因为这样可以减少一个HTTP请求哦。

然而,今天在搞一个需求,就是想通过Base64编码字符串是否可以得知实际文件的大小,一顿搜索引擎后,发现了新大陆,完全是可以的,甚是喜悦啊,因为这是新知识啊,学习的感觉真好,所以测试完成后,赶紧记录下来,分享给大家。

关于Base64的理论的知识,我就不bb了,我会把我搜索到的信息资料,放到下方的参考资料中哦,所以直接开始实战了。

比如,已知的Base64编码的字符串如下;

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAGdYAABnWARjRyu0AAAAMSURBVBhXY/j//z8ABf4C/qc1gYQAAAAASUVORK5CYII=

1、去除头部的Data URI scheme,比如上面列子中的,data:image/png;base64,

2、计算公式,(向上取整(Base64长度 / 4) * 3 ) - 填充长度

Base64长度:是指不包含填充部分的长度,如上面的列子为159

填充长度:查看Base64编码字符串末尾有几个等号(不会超过2个,所以值的范围为0,1,2),即为长度的数量,如上面列子为1

所以上面列子中的,文件大小为119字节(Byte),成功跟电脑上显示字节一样,我们成功啦。

下面也放个,我用JavaScript写的已知Base64编码字符串计算文件大小的代码;

/**
 * 已知Base64编码字符串计算文件大小的代码
 * @param str Base64编码字符串
 * @returns { number } 文件大小(字节)
 */
function calcBase64ToFileSize(str) {
  let padding = 0;
  str = str.substring(str.indexOf(",") + 1);
  if (str.endsWith("==")) {
    padding = 2;
  } else if (str.endsWith("=")) {
    padding = 1;
  }
  return Math.ceil(str.length / 4) * 3 - padding;
}

参考资料

Base64 length calculation

base64编码字符串的长度计算方法

本文地址:https://www.yerenwz.com/5561.html
版权声明:本文为原创文章,版权归 野人 所有,欢迎分享本文,转载请保留出处!

发表评论