我在字符串中有 Base64 编码的二进制数据:
const contentType = 'image/png';
const b64Data = 'iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==';
我想创建一个 blob:
包含此数据的 URL 并将其显示给用户:
const blob = new Blob(????, {type: contentType});
const blobUrl = URL.createObjectURL(blob);
window.location = blobUrl;
我一直无法弄清楚如何创建 BLOB。
在某些情况下,我可以通过使用 data:
URL 来避免这种情况:
const dataUrl = `data:${contentType};base64,${b64Data}`;
window.location = dataUrl;
然而,在大多数情况下, data:
URL 非常大。
如何在 JavaScript 中将 Base64 字符串解码为 BLOB 对象?
原文由 Jeremy 发布,翻译遵循 CC BY-SA 4.0 许可协议
atob
函数会将 Base64 编码的字符串解码为一个新字符串,其中每个二进制数据字节都有一个字符。每个字符的代码点 (charCode) 将是字节的值。我们可以通过使用
.charCodeAt
方法为字符串中的每个字符应用它来创建一个字节值数组。您可以通过将这个字节值数组传递给
Uint8Array
构造函数,将其转换为真正的类型化字节数组。反过来,可以通过将其包装在数组中并将其传递给
Blob
构造函数来将其转换为 BLOB。上面的代码有效。然而,通过在更小的切片中处理
byteCharacters
而不是一次全部处理,可以稍微提高性能。在我的粗略测试中,512 字节似乎是一个很好的切片大小。这为我们提供了以下功能。完整示例: