Как загрузить на S3 при получении Request.Body в ASP. NET Базовом приложении - PullRequest
0 голосов
/ 10 января 2020

Я создаю API в ASP. NET Core 2.1, где пользователи размещают очень большие JSON (сотни МБ). Затем JSON хранятся в Amazon S3 как есть, нет необходимости разбирать или преобразовывать JSON любым способом.

Я бы хотел, чтобы этот прогон был как можно более скудным, избегая копирования всего JSON в memory.

Поскольку AWS SDK требует доступного для поиска потока, я попытался скопировать поток Request.Body в MemoryStream, используя CopyToAsyn c. Но похоже, что он загружает в память полный JSON.

var seekableStream = new MemoryStream();
await this.Request.Body.CopyToAsync(seekableStream);
seekableStream.Position = 0;

var putRequest = new PutObjectRequest
{
  BucketName = this.BucketName,
  Key = key,
  InputStream = seekableStream
};

await this.S3Client.PutObjectAsync(putRequest);

Другой альтернативой будет сохранение Request.Body во временном файле на диске и потоковое чтение из него при загрузке на S3.

Есть ли лучший способ избежать сохранения Request.Body в памяти или на диске?

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