Casper-SC
@Casper-SC
.NET программист

JavaScript и скачивание файла с ASP.NET Core WebAPI сервера. Почему файл скачивается как повреждённый?

Что это может быть? Даже не представляю куда копать.

Ошибка в Excel: в книге обнаружено содержимое которое не удалось прочитать

Использую для скачивания
js-file-download

На сервере раздаю так:
using System.IO;
using System.Threading.Tasks;
using ClosedXML.Excel;
using Microsoft.AspNetCore.Mvc;

namespace Something.Extensions
{
    public static class XLWorkbookExtensions
    {
        public static Task<FileStreamResult> DeliverAsync(this XLWorkbook workbook, 
            string fileName = "attachment",
            string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
        {
            return Task.Run(() =>
            {
                var memoryStream = new MemoryStream();
                workbook.SaveAs(memoryStream);
                memoryStream.Seek(0L, SeekOrigin.Begin);
                var fileStream = new FileStreamResult(memoryStream, contentType);
                fileStream.FileDownloadName = fileName;
                return fileStream;
            });
        }
    }
}


//
        [HttpPost]
        [Route("get-report")]
        [ProducesResponseType(StatusCodes.Status200OK)]
        [ProducesResponseType(StatusCodes.Status400BadRequest)]
        [ProducesResponseType(StatusCodes.Status500InternalServerError)]
        public async Task<IActionResult> GetReport([FromBody] ReportParams parameters)
        {
            _logger.Debug(GET_REPORT_MESSAGE_TEMPLATE);
            if (parameters.From >= parameters.To)
            {
                return BadRequest(ErrorObject("Incorrect combination of parameters."));
            }

            try
            {
                // Какой-то код...
                XLWorkbook workbook = await _reportBuilder.Build(data);
                return await workbook.DeliverAsync($"Report_{DateTimeOffset.UtcNow:yyyy-dd-M--HH-mm-ss}.xlsx");
            }
            catch (Exception ex)
            {
                _logger.Error(ex, GET_REPORT_MESSAGE_TEMPLATE);
                return InternalServerError();
            }
        }


Если качаю при помощи приложения Postman, то файл нормально скачивается и открывается в Excel. Но вот скачивая его в JavaScript он скачивается повреждённым.

Лог из Postman
Request Headers
POST /api/get-report HTTP/1.1
Content-Type: application/json
User-Agent: PostmanRuntime/7.25.0
Accept: */*
Cache-Control: no-cache
Postman-Token: dc3e6175-0fcd-4613-9ef1-fcbd777dfb5b
Host: localhost:5001
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 82
Cookie: AppCookie=CfDJ8I5lw_HuaDpjA7DmwwY


Request Body
{
    "from": "2020-01-10T23:59:59+00:00",
    "to": "2021-01-01T23:59:59+00:00"
}


Response Headers
HTTP/1.1 200 OK
Date: Tue, 02 Jun 2020 20:40:34 GMT
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Server: Kestrel
Content-Length: 66060
X-Content-Type-Options: nosniff
X-Xss-Protection: 1
X-Frame-Options: DENY
Content-Disposition: attachment; filename=Report_2020-02-6--20-40-29.xlsx; filename*=UTF-8''Report_2020-02-6--20-40-29.xlsx
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
Casper-SC
@Casper-SC Автор вопроса
.NET программист
Проблема была в том, что в axios не передавался параметр responseType: 'blob',.

getReport(dateFrom, dateTo) {
        return axios.post(this.config.getReportUrl, {
            from: dateFrom,
            to: dateTo
        }, {
            baseURL: this.config.baseUrl,
            withCredentials: true,
            responseType: 'blob',
            headers: {
                "Accept": "*/*",
                "Cache-Control": "no-cache",
            }
        });
    };
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы