Невозможно правильно прочитать поток файлов Excel после изменения формата запроса. (Разделенные или составные архивы не поддерживаются.) - PullRequest
0 голосов
/ 06 января 2020

Я пытаюсь загрузить файл xlsx и прочитать его, проблема в том, что я изменил запрос, через который отправляю его. Теперь я получаю сообщение об ошибке:

Split or spanned archives are not supported.
[Error] Product.Presentation.Controllers.DatabaseController:    at System.IO.Compression.ZipArchive.ReadEndOfCentralDirectory()
   at System.IO.Compression.ZipArchive.Init(Stream stream, ZipArchiveMode mode, Boolean leaveOpen)
   at System.IO.Compression.ZipArchive..ctor(Stream stream, ZipArchiveMode mode, Boolean leaveOpen, Encoding entryNameEncoding)
   at ExcelDataReader.Core.ZipWorker..ctor(Stream fileStream)
   at ExcelDataReader.ExcelOpenXmlReader..ctor(Stream stream)
   at ExcelDataReader.ExcelReaderFactory.CreateReader(Stream fileStream, ExcelReaderConfiguration configuration)
   at Product.Business.Handlers.SeedProductModelHandler.Handle(SeedProductModelCommand request, CancellationToken cancellationToken) in /home/vsts/work/1/s/src/Services/Product API/10 Business/Product.Business.Handlers/SeedProductModelHandler.cs:line 39
   at MediatR.Pipeline.RequestPostProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestPreProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestPostProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestPreProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestPostProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestPreProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestPostProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestPreProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at Product.Presentation.Controllers.DatabaseController.SeedProductModel() in /home/vsts/work/1/s/src/Services/Product API/00 Presentation/Product.Presentation.Controllers/DatabaseController.cs:line 102 

Проблема в том, что я получаю эту ошибку на нашем сервере (AWS lambda), но нет на моей локальной машине, поэтому ее очень трудно отладить. Я думаю, что это как-то связано с заголовками, но я не уверен.

текущий запрос выглядит так: enter image description here

Раньше было так: enter image description here

In the new instance i'm using the Content-Type header: multipart/form-data
In the old instance i'm using the Content-Type header: application/octet-stream

Текущий код:

var version = Request.Form["version"];
var changedBy = Request.Form["changedBy"];
var formFile = Request.Form.Files.FirstOrDefault();
var command = new SeedProductModelCommand(formFile.OpenReadStream(), version, changedBy);
var result = await _mediator.Send(command);

В трассировке стека указано, что это является причиной ошибки (первая строка кода SeedProductModelCommand метод обработки).

using (var reader = ExcelReaderFactory.CreateReader(request.ProductModelStream))
...