如何从 Base 64 字符串获取 MIME-TYPE?

2024-01-11

我从后端获取字符串的 base64,然后用 Javascript 对其进行解码以在浏览器上显示。

该字符串可以是任何文件 .pdf、.img、.docx、.zip 等。

我的 base64 字符串不包含 mime 类型,例如“data:application/pdf;base64”部分。所以我需要获取 base64 的 mime 类型。

有什么办法可以用 Javascript 或 Jquery 解决这个问题吗?


您可以使用神奇的数字 https://en.wikipedia.org/wiki/Magic_number_(programming)检测 MIME 类型(在此处检查文件签名列表 https://en.wikipedia.org/wiki/List_of_file_signatures)。但是,文件签名并非 100% 可靠,您很容易遇到误报。当然,在某些任务中,这样的解决方案就足够了。

因此,如果您有一个 Base64 字符串并希望使用文件签名来识别其 MIME 类型,则无需解码 Base64。一种更快的方法是将文件签名存储为 Base64,并仅检查输入是否以其中之一开头。一个简单的例子:

var signatures = {
  JVBERi0: "application/pdf",
  R0lGODdh: "image/gif",
  R0lGODlh: "image/gif",
  iVBORw0KGgo: "image/png",
  "/9j/": "image/jpg"
};

function detectMimeType(b64) {
  for (var s in signatures) {
    if (b64.indexOf(s) === 0) {
      return signatures[s];
    }
  }
}

// Some tests
console.log(detectMimeType('R0lGODdhAQABAPAAAP8AAAAAACwAAAAAAQABAAACAkQBADs='));
console.log(detectMimeType('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR42mP4z8AAAAMBAQD3A0FDAAAAAElFTkSuQmCC'));
console.log(detectMimeType('JVBERi0xLjUKJYCBgoMKMSAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgMTQxL04gMjAvTGVuZ3'));
console.log(detectMimeType('/9j/4AAQSkZJRgABAQAAZABkAAD/2wCEABQQEBkSGScXFycyJh8mMi4mJiYmLj41NTU1NT5EQUFBQUFBRERERERERERE'));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Base 64 字符串获取 MIME-TYPE? 的相关文章