Сохранение файла Excel в веб-интерфейсе, полученного как байтовый массив из API - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь вернуть файл Excel в виде байтового массива из API ядра aspnet с постом ajax, но у меня есть некоторые проблемы.

Я знаю, что проще вернуть IActionResult, но для этого случая мне нужно, чтобы он был в вызове ajax.

Кажется, что бэкэнд работает несколько.I Создаю отчет 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 для создания большого двоичного объекта и сохранения:

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.Кто-нибудь знает, что я делаю неправильно?Может быть, я подхожу к этому все неправильно

...