Javascript 使用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

我正在尝试用angular js下载该文件。为此,我使用了blob概念。文件下载成功,但当我打开该文件时,它显示文件已损坏

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数据。