TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #1923 1.51K
День 1577. #ЗаметкиНаПолях
Загрузка Больших Файлов в
ASP.NET Core. Окончание
Начало

3. Теперь посмотрим на метод действия контроллера и сервис для загрузки файлов:
[HttpPost("upload")]
[MultipartFormData]
[DisableModelBinding]
public async Task<IActionResult> Upload()
{
var len = await _fileSvc
.UploadAsync(
HttpContext.Request.Body,
Request.ContentType);

return CreatedAtAction(nameof(Upload), len);
}

Здесь у нас есть метод действия HTTP POST, который имеет атрибуты, созданные в предыдущем посте, гарантирующие, что входящий запрос имеет правильный тип содержимого "multipart/form-data" и отключающие проверку модели.

Метод вызывает UploadAsync из сервиса FileService, который показан ниже:
public async Task<long> UploadAsync(
Stream file, string contentType)
{
long size = 0;
var bound =
HeaderUtilities.RemoveQuotes(
MediaTypeHeaderValue
.Parse(contentType).Boundary)
.Value;
var reader =
new MultipartReader(bound, file);
var sect =
await reader.ReadNextSectionAsync();

while (sect != null)
{
var fileSec = sect.AsFileSection();
if (fileSec is null) continue;

var path = Path.Combine("uploads",
fileSec.FileName);
await using var stream =
new FileStream(path,
FileMode.Create,
FileAccess.Write,
FileShare.None,
1024);

await fileSec.FileStream?
.CopyToAsync(stream);

size += fileSec.FileStream.Length;

sect = await
reader.ReadNextSectionAsync();
}
return size;
}

Метод UploadAsync считывает составные данные из входного потока и сохраняет каждый файл на диск. Файлы должны быть разделены границей, определённой в заголовке Content-Type. Мы извлекаем эту границу в переменную bound, затем читаем каждый файл в цикле. Также вычисляем общий размер загруженных файлов.

Полный и более подробный код проекта на GitHub.

Посмотрим, как отправлять файлы с помощью Postman:
Нужно выбрать опцию form-data и добавить пары ключ-значение, где ключом будет имя файла, а значением - сам файл. Также проверьте, что установлен заголовок Content-Type со значением «multipart/form-data; border=…» на вкладке заголовков.

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

Источник: https://code-maze.com/aspnetcore-upload-large-files/
  • 👍 16
More from @netdeveloperdiary
  1. Oct 12, 2026День 2812. #Карьера #AI Как Разработчикам Оставаться Полезными, Когда Код Пишет ИИ? По мер…
  2. Oct 11, 2026День 2811. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  3. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
  4. Oct 9, 2026День 2809. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Окончание Начало 3.…
  5. Oct 8, 2026День 2808. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Начало В ИТ есть се…
  6. Oct 7, 2026День 2807. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Окончание Нач…
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 →