base64转blob为什么要去掉base64中的后两位

发布于 2022-09-12 02:34:11 字数 636 浏览 17 评论 0

以下是网上抄的代码

function dataURLtoBlob(dataurl) {
  const arr = dataurl.split(',');
  //注意base64的最后面中括号和引号是不转译的
  const _arr = arr[1].substring(0, arr[1].length - 2);
  const mime = arr[0].match(/:(.*?);/)[1];
  const bstr = atob(_arr);
  let n = bstr.length
  const u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr], {
    type: mime
  });
}

其中

//注意base64的最后面中括号和引号是不转译的
const _arr = arr[1].substring(0, arr[1].length - 2);

这两句是什么意思.
自己用的base64中, 最后两位不是括号也不是引号, 而是不确定的两位字符.
已知遇到过的情况有: "==" "I=" "CC"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一生独一 2022-09-19 02:34:11

这个不太清楚,但是我知道另一种 base64 --> blob 的方式:

const dataURL = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='

fetch(dataURL)
  .then(res => res.blob())
  .then(blob => {
    console.log('blob: ', blob)
  })

更多 blob --> file --> dataURL(base64) | blobURL --> blob 转换闭环可查看这里

心头的小情儿 2022-09-19 02:34:11

得看到元数据啥样,说不定就是因为都多带了一个字符

睫毛上残留的泪 2022-09-19 02:34:11

base64 的转码规则决定了原文字节长度除3余1的时候会==补全,余2的时候会=补全,整除的时候就不会有等号了

应该不是去掉等号用的,看注释说是去掉最后面中括号和引号

貌似是元数据包含了中括号和引号?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文