Загрузка файла Lambda AWS в ASP.NET Core 2.1 Razor Page приводит к повреждению двоичного файла - PullRequest
0 голосов
/ 03 марта 2019

У меня есть небольшой сайт ASP.NET Core, который я размещаю в AWS lambda.У меня есть простая загрузка рабочей книги Excel, которая работает правильно при размещении в экземпляре IIS Express (запущенном из Visual Studio локально), но после публикации моего сайта в AWS Lambda данные двоичного файла повреждены.Мой код ниже:

Upload.cshtml

<h3>Please pick the workbook to upload...</h3>
<div class="row">
    <div class="col-md-4">
        <form method="post" enctype="multipart/form-data">
            <div class="form-group">
                <label asp-for="WorkbookFile" class="control-label"></label>
                <input asp-for="WorkbookFile" type="file" class="form-control" style="height:auto" />
                <span asp-validation-for="WorkbookFile" class="text-danger"></span>
            </div>

            <input type="submit" asp-page-handler="Preview" value="Preview Upload" class="btn btn-default" />
        </form>
    </div>
</div>

Upload.cshtml.cs

    [BindProperty]
    [Required]
    [Display(Name = "Workbook")]
    public IFormFile WorkbookFile { get; set; }


     public async Task<IActionResult> OnPostPreview()
     {
            // Perform an initial check to catch FileUpload class
            // attribute violations.
            if (!ModelState.IsValid)
            {
                return Page();
            }
            byte[] fileContents;
            Guid workbookId;
            using (var memoryStream = new MemoryStream())
            {
                await WorkbookFile.OpenReadStream().CopyToAsync(memoryStream);
                fileContents = memoryStream.ToArray();
                workbookId = SaveWorkbook(fileContents);
            }

            return RedirectToPage("./UploadReview", new { id = workbookId });
        }

Asописан в документации AWS (https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings.html) Я добавил «multipart / form-data» в список «двоичных» типов моего шлюза Api, но это, похоже, не оказывает никакого влияния.

Снимок экрана настроек API-шлюза

Исходя из всего, что я могу найти, это должно позволить моим загруженным файлам передаваться в двоичном формате прямо в мою службу, однако полученные файлы в 2 раза больше файлов при загрузкелокально, поэтому я предполагаю, что кодировка base64 все еще применяется.

Все заголовки запроса выглядят либо как multipart / form-data, либо application / octet-stream, так что я действительно в конце моегоя не являюсь ни веб-специалистом, ни экспертом AWS. Любые предложения будут с благодарностью приняты. Спасибо!

РЕДАКТИРОВАТЬ 1. На рисунке (ссылка) показаны сообщения журнала, в которых записаны размеры в байтах []получение в ядре ASP.NETкогда работает локальный против запуска AWS.

Журнал сообщений с размерами массива

На рисунке (ссылка) ниже показаны инструменты разработчика Chrome, показывающие, что мой тип контента - multipart / form-data, а длина строки вверхс ожидаемым размером.

Chrome Dev Tools Информация

1 Ответ

0 голосов
/ 05 марта 2019

После просмотра большей части интернета моей проблемой было «Сохранить», а не «Использовать».Блог ниже дал мне подсказку, в которой я нуждался:

https://github.com/krisgholson/serverless-thumbnail

После изменения «Настройки» шлюза API для включения данных multipart / form и нажатия «Сохранить изменения», измененияСОХРАНЕНЫ, но не используются.Чтобы ИСПОЛЬЗОВАТЬ новые настройки, необходимо перейти на вкладку Ресурсы, раскрывающийся список «Действия»> Развернуть API.После того, как API был развернут, теперь будет использоваться сохраненная конфигурация (в моем сценарии двоичные данные передаются, как ожидалось).Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...