Дневник сертифицированного .NET разработчика. Заметки, советы, новости из мира .NET и C#.
Для связи: @SBenzenko
Поддержать канал:
- https://boosty.to/netdeveloperdiary
- https://patreon.com/user?u=52551826
- https://pay.cloudtips.ru/p/70df3b3b
Post #1922
1.59K
День 1576. #ЗаметкиНаПолях
Загрузка Больших Файлов в ASP.NET Core. Начало
Недавно мы рассмотрели, как создавать большие файлы для тестов, сегодня посмотрим, как обрабатывать загрузку больших файлов в ASP.NET Core.
Потоки, как правило, лучше, чем использование byte[] или MemoryStream при обработке больших файлов по нескольким причинам:
- Потоки могут значительно сократить использование памяти, т.к. обрабатывают файл блоками, обеспечивая более эффективное управление памятью.
- Использование потоков также может повысить скорость обработки, позволяя одновременно читать и записывать файл.
Для поддержки больших файлов нам нужно сделать несколько вещей:
- настроить Kestrel,
- добавить атрибуты валидации,
- добавить метод обработки и сервис загрузки файлов (об этом в следующем посте).
1. Настройка Kestrel
Нужно настроить Kestrel в файле Program.cs, чтобы разрешить загрузку больших файлов:
2. Атрибуты валидации
Определим 2 атрибута фильтров действия для валидации контента.
1) MultipartFormDataAttribute проверит, что способом отправки является "multipart/form-data":
Источник: https://code-maze.com/aspnetcore-upload-large-files/
Загрузка Больших Файлов в ASP.NET Core. Начало
Недавно мы рассмотрели, как создавать большие файлы для тестов, сегодня посмотрим, как обрабатывать загрузку больших файлов в ASP.NET Core.
Потоки, как правило, лучше, чем использование byte[] или MemoryStream при обработке больших файлов по нескольким причинам:
- Потоки могут значительно сократить использование памяти, т.к. обрабатывают файл блоками, обеспечивая более эффективное управление памятью.
- Использование потоков также может повысить скорость обработки, позволяя одновременно читать и записывать файл.
Для поддержки больших файлов нам нужно сделать несколько вещей:
- настроить Kestrel,
- добавить атрибуты валидации,
- добавить метод обработки и сервис загрузки файлов (об этом в следующем посте).
1. Настройка Kestrel
Нужно настроить Kestrel в файле Program.cs, чтобы разрешить загрузку больших файлов:
builder.WebHost.ConfigureKestrel(opts =>Здесь long.MaxValue приведено для примера и позволяет загружать файлы практически любого размера. В реальности задайте значение, которое нужно вам. Также можно использовать атрибут RequestSizeLimit на отдельном методе действия.
{
opts.Limits.MaxRequestBodySize
= long.MaxValue;
});
2. Атрибуты валидации
Определим 2 атрибута фильтров действия для валидации контента.
1) MultipartFormDataAttribute проверит, что способом отправки является "multipart/form-data":
public class MultipartFormDataAttribute2) Также нужно отключить проверку модели, чтобы связыватели модели не проверяли тело и не загружали его в память или на диск:
: 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);
}
}
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

