【发布时间】:2019-10-27 20:05:41
【问题描述】:
我的 base64 字符串看起来像 "UklGRkAdEQBXQVZFZm10IBIAAAABAAEAg..."。
我尝试通过浏览器下载此文件。所以,
- 我通过函数将其转换为 blob:
b64toBlob: function(b64Data, sliceSize = 512) {
let byteCharacters = atob(b64Data);
let byteArrays = [];
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
let slice = byteCharacters.slice(offset, offset + sliceSize);
let byteNumbers = new Array(slice.length);
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
let byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
let blob = new Blob(byteArrays);
return blob;
}
-
URL.createObjectURL(this.b64toBlob(base64))从 blob 创建 URL - 使用创建的 URL 模拟点击
<a>标记。
Mozilla Firefox 可以识别文件类型并提供下载具有正确扩展名的文件,这很好,但 Chrome 提供下载 txt 文件而不管实际文件类型,这是一个问题。
我可以设置文件类型,当创建 blob 文件时,Chrome 会正常工作,但我不知道如何从 base64 定义正确的 MIME 类型。
【问题讨论】:
-
您无法检测到字符串化文件的 mimeType。当文件存储为base64时,通常将mimeType保存在数据库中,然后,在向webserver请求文件后,后端将设置适当的Content-Type并输出解码后的base64字符串。使用
attachment标头将提示用户下载文件。 -
如果你有原来的FILENAME.EXT(extension),你可以将Content-Type设置为
application/octet-stream,浏览器会按原样保存文件,但是.EXT部分将允许本地应用程序打开它,如果用户计算机上有任何适用于您的文件的阅读器。
标签: javascript base64 mime-types