将前端文件保存在从api检索为字节数组的前端中

时间:2018-06-11 11:18:05

标签: asp.net-core closedxml filesaver.js

我正试图从带有ajax帖子的aspnet核心api返回一个Excel文件作为字节数组,但我遇到了一些问题。

我知道返回IActionResult更容易,但是对于这种情况,我需要它在ajax调用中。

后端似乎有点奏效。我创建excel报告并返回一个字节数组:

    [HttpPost]
    [Route("api/excel/")]
    public byte[] ExportToExcel([FromBody] List<CarReports> carReports)
    {
        var orderReports = monthlyReports.OrderBy(x => x.Project.Code).ToList();
        var workbook = new XLWorkbook();
        var worksheet = workbook.Worksheets.Add("Fakturering");

        // Here I create the excelsheet

        var returnStream = new MemoryStream();
        workbook.SaveAs(returnStream);
        byte[] arr = returnStream.ToArray();
        returnStream.Flush();
        returnStream.Close();
        return arr;
    }

在前端,我使用filesaver.js创建一个blob并保存:

export function excelExport(filteredReports, type){
    return dispatch => {
        dispatch({ type: EXCEL_EXPORT, filteredReports, type });
        dispatch(loading());
        return client.excelExport(filteredReports, type)
            .catch(errors => {
                dispatch({type: EXCEL_EXPORT_FAIL})
                dispatch(error(errors))
            })
            .then((response) => {
                console.log(response);
                const blob = new Blob([response], {
                    type:
                      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
                  }); 
                  fileSaver.saveAs(blob, "test.xlsx");
                  dispatch(done());
            });
    }
}

代码似乎有效,但是当我打开文件时,它看起来像这样:

enter image description here

似乎字节数组已放入excel表中。 有谁知道我做错了什么?也许我正在接近这个错误的

0 个答案:

没有答案