You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript下载PHP返回的Base64文件?下载后文件为空

解决Base64转本地文件下载空白问题

问题出在你处理Base64解码的方式上:用atob得到的是字符串,直接丢进Blob会被JS按UTF-8重新编码,破坏了原文件的二进制结构,导致PDF这类依赖精准二进制数据的文件打开空白。

正确的做法是把解码后的字符串转成Uint8Array二进制数组,再生成Blob。修改后的代码如下:

var name = json_obj['data']['nombre'];
var base64Str = json_obj['data']['archivo'];

// 如果Base64字符串带"data:application/pdf;base64,"前缀,先截取有效部分
if (base64Str.includes(',')) {
  base64Str = base64Str.split(',')[1];
}

// 解码Base64并转换为Uint8Array二进制数组
var binaryStr = atob(base64Str);
var uint8Array = new Uint8Array(binaryStr.length);
for (var i = 0; i < binaryStr.length; i++) {
  uint8Array[i] = binaryStr.charCodeAt(i);
}

var file = new Blob([uint8Array], {type: 'application/pdf'});
link = URL.createObjectURL(file);

var a = $("<a />");
a.attr("download", name);
a.attr("href", link);
$("body").append(a);
a[0].click();
$("body").remove(a);
// 释放URL对象,避免浏览器内存泄漏
URL.revokeObjectURL(link);

额外补充:最后加上URL.revokeObjectURL(link)可以及时释放创建的临时URL,避免长期占用浏览器内存。

内容的提问来源于stack exchange,提问作者Francisco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 20:55:00