Javascript 如何在.NETCore2.0中通过ajax下载excel(.xlsx)

Javascript 如何在.NETCore2.0中通过ajax下载excel(.xlsx),javascript,c#,excel,epplus,Javascript,C#,Excel,Epplus,我正在尝试下载一个包含大量数据集的excel文件。在服务器端,我使用EPPlus库生成excel。然后,我将流obj传递给客户端。客户端代码使用该流obj下载excel文件。 打开下载的文件时,会收到损坏的文件错误消息。我错在哪里? 服务器端代码(C#) 我已经为MVC回答了这个问题。你可以以此为出发点。@SouXin这有什么帮助?EPPlus与ClosedXML。我尝试使用mime类型的octet,但没有成功。注意,我确实下载了excel,但文件已损坏。对不起,我刚开始忘记它是一个closed

我正在尝试下载一个包含大量数据集的excel文件。在服务器端,我使用EPPlus库生成excel。然后,我将流obj传递给客户端。客户端代码使用该流obj下载excel文件。
打开下载的文件时,会收到损坏的文件错误消息。我错在哪里?

服务器端代码(C#)


我已经为MVC回答了这个问题。你可以以此为出发点。@SouXin这有什么帮助?EPPlus与ClosedXML。我尝试使用mime类型的octet,但没有成功。注意,我确实下载了excel,但文件已损坏。对不起,我刚开始忘记它是一个closedXml st。其思想是通过testream返回iframe的src。如果我没记错的话。@SouXin我甚至尝试了
返回stream.ToArray()服务器端的最后一行,而不是epplus中的返回文件,您必须另存为bytearray。然后再回来。开始时不需要内存流
public async Task<IActionResult> DownloadExcel(Model postData)
{
    string apiUrl = "Api/URL/Get";
    apiUrl += "?Status=" + postData.Status +
              "&Gender=" + postData.Gender +
              "&CurrentAge=" + postData.CurrentAge;

    var result = await CallAPI.GetListFromApiAsync<ResultModel>(apiUrl);

    var stream = new MemoryStream();
    using (ExcelPackage excel = new ExcelPackage(stream))
    {
        var workSheet = excel.Workbook.Worksheets.Add("Sheet1");

        //  Column
        workSheet.Cells[1, 1].Value = "Column 1";
        workSheet.Cells[1, 2].Value = "Column 2";
        .
        .
        .
        workSheet.Cells[1, 19].Value = "Column 19";

        // Row
        int recordIndex = 2;
        foreach (var d in result)
        {
            workSheet.Cells[recordIndex, 1].Value = d.data1;
            workSheet.Cells[recordIndex, 2].Value = d.data2;
            .
            .
            .
            workSheet.Cells[recordIndex, 19].Value = d.data4;
            recordIndex++;
        }
        for (int i = 1; i < 20; i++)
        {
            workSheet.Column(i).AutoFit();
        }

        string fileName = @"download.xlsx";
        string fileType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        stream.Position = 0;
        return File(stream, fileType, fileName);
    }
}
$.ajax({
    url: "/SomeURL/DownloadExcel",
    type: "POST",
    data: form.serialize(),
    success: function (result) {
        var binaryData = [];
        binaryData.push(result);
        var blob = new Blob([binaryData], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;' });
        var link = document.createElement('a');
        link.href = window.URL.createObjectURL(blob);
        link.download = 'download.xlsx';
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
    }
});