Я создаю 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 в памяти или на диске?