如何将Base64文件转换为javascript中的实际文件/原始文件并下载到客户端
How to convert Base64 File to the actual file / original file in javascript and download it to client
很抱歉,如果我的问题有点令人困惑,但我认为可以通过我的详细解释来澄清这一点。
我对 saving/uploading 文件很陌生。我最近能够上传图像并将其作为 base64
(数据类型 = mediumblob
)保存到数据库中,并通过设置 <img src='base64_data_from_db' />
在浏览器中再次显示。
现在解决我的实际问题。
我必须将任何类型的文件上传到数据库。保存后,用户必须能够通过单击 link/button(我使用 link)使用浏览器下载文件。我能够使用 base64 保存文件。
我现在遇到的问题是如何将 base64 字符串转换为 actual/original 文件(如 MS Word、文本文件、图像等)并将其下载给用户。
我去掉了base64字符串的前缀,用window.atob(str)
来
转换它。当我 console.log(window.atob(str))
但我不知道如何下载它时,我可以以某种方式看到文件的内容。
注意:我在保存时使用了 base64,因为我使用 JSON 保存它。
我正在使用 Java Spring 休眠。
我尝试 google 但大多数时候我看到 how to convert Base64 to image
... 正如我之前所说,我已经在 <img src=''/>
中显示了图像。我也在阅读 javascript FileReader,但它需要一个 Blob 作为参数,而我拥有的是一个 base64 字符串。
下面有一个非常不完整的代码,因为我不知道接下来要做什么...
// strBase64 -- The base64 string equivalent of the file
function convBase64ToFile(strBase64) {
var tmp = strBase64.split(","); // To remove the prefix
var converted = window.atob(tmp[1]); //
console.log(converted); // Displays the content of the actual file
}
请帮忙....
我已经解决了这个问题...
我将 base64 字符串转换为 Blob 然后使用 URL.createObjectURL()
获取 url 然后打开一个新的 window 将 blob 的 url 设置为 window 的 url.
function convBase64ToFile(strBase64) {
var tmp = strBase64.split(",");
var prefix = tmp[0];
var contentType = prefix.split(/[:;]+/)[1];
var byteCharacters = atob(tmp[1]);
var byteNumbers = new Array(byteCharacters.length);
for (var i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
var blob = new Blob([byteArray], {type: contentType});
var blobUrl = URL.createObjectURL(blob);
window.open(blobUrl, "popup","width=1000,height=500,scrollbars=1,resizable=no," +
"toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0");
}