首页 > 解决方案 > 将请求中的数据(八位字节流)保存为 Excel 文件会导致文件损坏

问题描述

我正在使用 C# API 将 Excel 文件(工作正常)作为八位字节流返回FileContentResult(byte[], MediaTypeNames.Application.Octet, "file.xlsx"

然后我想从 js 打开下载文件提示,一切正常,除了文件已损坏

我一直在尝试这些帖子中的各种解决方案,而 Excel 文件总是导致损坏

JavaScript:创建和保存文件

没有链接的 JavaScript blob 文件名

在 JS 中创建二进制 blob

并且FileSaver.js

$.ajax({
url: url,
type: 'POST',
data: formData,
processData: false,
contentType: 'application/json',
success: function (result) 
{
    saveFile(result);
}
});

我知道该文件工作正常,因为当我通过 Swagger 对其进行测试时,它工作正常

有任何想法吗?

标签: javascriptc#asp.net-coreblob

解决方案


对我有用的是添加responseType: 'arraybuffer'到ajax:

$.ajax({
  url: url,
  type: 'POST',
  data: formData,
  contentType: false,
  processData: false,
  xhrFields: {
    responseType: 'arraybuffer'
  },
  success: function (data) {
    const blob = new Blob([data]);
    saveAs(blob, "output.xlsx");
  }
});

推荐阅读