Потоковое многостраничное тело запроса, не дожидаясь его первой загрузки - PullRequest
0 голосов
/ 10 июля 2020

Можно ли отправить запрос POST на контроллер и прочитать поток HttpContext.Request.Body сразу после отправки запроса POST (например, если размер файла составляет 10 ГБ)? Если у меня есть такая форма:

<form method="post" enctype="multipart/form-data">

и такой контроллер:

public class FileController : ControllerBase 
{
    [HttpPost("[action]")]
    public async Task Upload() 
    {
        var stream = HttpContext.Request.Body;
    }
}

Если я отправляю файл, он сначала загружает файл (как я вижу в моем браузер), а затем он попадает в контроллер, после чего весь файл сохраняется во временном файле, как вы можете видеть здесь: https://github.com/aspnet/HttpAbstractions/blob/07d115400e4f8c7a66ba239f230805f03a14ee3d/src/Microsoft.AspNetCore.WebUtilities/FileBufferingReadStream.cs#L186

Я могу проверить, что он сохраняет загруженный файл на диск, который не будет работать для моего приложения, так как у меня нет неограниченного хранилища. Моя конечная цель - загрузить файл на FTP, поэтому запрос выглядит следующим образом:

client -> service -> FTP

Что я делаю не так?

1 Ответ

1 голос
/ 28 июля 2020

Ряд решений описан в Работа с большими загрузками файлов на ASP. NET Core 1.0 .

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

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