Загрузить очень большой файл слишком долго - PullRequest
0 голосов
/ 18 октября 2019

У меня есть приложение ASP.NET Core WebApi, и мне нужно загрузить очень большой файл. Я включил JWT Auth / Authz

services.AddAuthentication(cfg =>
{
     cfg.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
     cfg.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, cfg =>
{ .. }

TTL токена составляет 2 минуты.

Затем у меня есть действия в моем контроллере, такие как

public async Task<IActionResult> Add(IFormFile file)
{
     if (file.Length.ToMegabytes() > 500)
     {
        throw new BadRequestException(nameof(file), "File size should not exceed 500 MB");
     }
}

и настройка в Интернетеhost

.UseKestrel(options =>
 {
    options.Limits.MaxRequestBodySize = null;
 })

Когда я загружаю большой файл (~ 1 ГБ), требуется много времени, а затем возвращается 401, прежде чем он вступит в мои действия.

Как проверить, что файл имеетне правильный размер, прежде чем он будет загружен? Потому что загрузка займет больше 2 минут и в результате я получу 401

1 Ответ

2 голосов
/ 18 октября 2019

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

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

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