Я пытаюсь вернуть файл 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());
});
}
}
Код работает,но когда я открываю файл, он выглядит так:
Кажется, что массив байтов был помещен в таблицу Excel.Кто-нибудь знает, что я делаю неправильно?Может быть, я подхожу к этому все неправильно