Javascript 使用blob文件下载时表示文件已损坏
我正在尝试用angular js下载该文件。为此,我使用了blob概念。文件下载成功,但当我打开该文件时,它显示文件已损坏Javascript 使用blob文件下载时表示文件已损坏,javascript,angularjs,blob,Javascript,Angularjs,Blob,我正在尝试用angular js下载该文件。为此,我使用了blob概念。文件下载成功,但当我打开该文件时,它显示文件已损坏 var saveData = (function () { var a = document.createElement("button"); document.body.appendChild(a); a.style = "display: none"; return function (excelData, fileName) { // v
var saveData = (function () {
var a = document.createElement("button");
document.body.appendChild(a);
a.style = "display: none";
return function (excelData, fileName) {
// var blob = b64toBlob(excelData, contentType);
blob = new Blob([excelData], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}),
url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
};
}());
这可能不是您的问题,但是
a
应该是锚
元素,而不是既没有href
也没有下载
属性的
。对于您的问题,问题可能来自此部分之前,即生成excelData
时。这个变量包含什么?excelData
是我希望在excel文件中看到的数据。它是什么格式<代码>纯/文本?(坏),arrayBuffer
?(更好)还有别的吗?(可能不好)。当您执行console.log(excelData)
时,您在控制台中看到了什么?数据以excel格式存在…{type:“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”}
否。。。这不是数据,这只是MIMEType,当您不将blob发送到服务器时,它实际上是非常无用的;除了text/…
,您可以在其中添加编码规则,因为一旦下载,此MIMEType将消失,并且只能通过文件扩展名(不好,但浏览器会这样做…)或文件的幻数(对于xlsx文件为504b0304
)猜测。)因此,如果读取为十六进制的excelData
的前4个字节不是50 4B 03 04
excelData不是xlsx数据。这可能不是您的问题,但a
应该是锚
元素,而不是既没有href
属性也没有下载属性的
。对于您的问题,问题可能来自此部分之前,即生成excelData
时。这个变量包含什么?excelData
是我希望在excel文件中看到的数据。它是什么格式<代码>纯/文本
?(坏),arrayBuffer
?(更好)还有别的吗?(可能不好)。当您执行console.log(excelData)
时,您在控制台中看到了什么?数据以excel格式存在…{type:“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”}
否。。。这不是数据,这只是MIMEType,当您不将blob发送到服务器时,它实际上是非常无用的;除了text/…
,您可以在其中添加编码规则,因为一旦下载,此MIMEType将消失,并且只能通过文件扩展名(不好,但浏览器会这样做…)或文件的幻数(对于xlsx文件为504b0304
)猜测。)因此,如果读取为十六进制的excelData
的前4个字节不是50 4B 03 04
excelData不是xlsx数据。