TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #1922 1.59K
День 1576. #ЗаметкиНаПолях
Загрузка Больших Файлов в
ASP.NET Core. Начало
Недавно мы рассмотрели, как создавать большие файлы для тестов, сегодня посмотрим, как обрабатывать загрузку больших файлов в ASP.NET Core.

Потоки, как правило, лучше, чем использование byte[] или MemoryStream при обработке больших файлов по нескольким причинам:
- Потоки могут значительно сократить использование памяти, т.к. обрабатывают файл блоками, обеспечивая более эффективное управление памятью.
- Использование потоков также может повысить скорость обработки, позволяя одновременно читать и записывать файл.

Для поддержки больших файлов нам нужно сделать несколько вещей:
- настроить Kestrel,
- добавить атрибуты валидации,
- добавить метод обработки и сервис загрузки файлов (об этом в следующем посте).

1. Настройка Kestrel
Нужно настроить Kestrel в файле Program.cs, чтобы разрешить загрузку больших файлов:
builder.WebHost.ConfigureKestrel(opts =>
{
opts.Limits.MaxRequestBodySize
= long.MaxValue;
});
Здесь long.MaxValue приведено для примера и позволяет загружать файлы практически любого размера. В реальности задайте значение, которое нужно вам. Также можно использовать атрибут RequestSizeLimit на отдельном методе действия.

2. Атрибуты валидации
Определим 2 атрибута фильтров действия для валидации контента.
1) MultipartFormDataAttribute проверит, что способом отправки является "multipart/form-data":
public class MultipartFormDataAttribute 
: ActionFilterAttribute
{
public override void
OnActionExecuting(
ActionExecutingContext ctx)
{
var r = ctx.HttpContext.Request;
if (r.HasFormContentType
&& r.ContentType
.StartsWith("multipart/form-data"))
return;

ctx.Result = new
StatusCodeResult(
StatusCodes.Status415UnsupportedMediaType);
}
}

2) Также нужно отключить проверку модели, чтобы связыватели модели не проверяли тело и не загружали его в память или на диск:
public class DisableModelBindingAttribute : 
Attribute, IResourceFilter
{
public void OnResourceExecuting(
ResourceExecutingContext ctx)
{
var f = ctx.ValueProviderFactories;
f.RemoveType<FormValueProviderFactory>();
f.RemoveType<FormFileValueProviderFactory>();
f.RemoveType<JQueryFormValueProviderFactory>();
}
}

Окончание следует…

Источник:
https://code-maze.com/aspnetcore-upload-large-files/
  • 👍 17
More from @netdeveloperdiary
  1. Oct 11, 2026День 2811. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  2. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
  3. Oct 9, 2026День 2809. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Окончание Начало 3.…
  4. Oct 8, 2026День 2808. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Начало В ИТ есть се…
  5. Oct 7, 2026День 2807. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Окончание Нач…
  6. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →