如何从 base64 字符串获取 MIME 类型?
Posted
技术标签:
【中文标题】如何从 base64 字符串获取 MIME 类型?【英文标题】:How can I get MIME type from base64 String? 【发布时间】: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
部分将允许本地应用程序打开它,如果用户计算机上有任何适用于您的文件的阅读器。
【参考方案1】:
读取 base64 的第一个字符。
content.charAt(0)
并保留一个具有以下值的开关盒以获取类型
'/' : jpg
'我':png
'R' : gif
'U' : webp
【讨论】:
谢谢,但这还不够。我的文件可能有任何类型。不仅仅是一张图片。以上是关于如何从 base64 字符串获取 MIME 类型?的主要内容,如果未能解决你的问题,请参考以下文章