1. 소개
ASP.NET Core MVC에서 파일 업로드를 위한 기본 최대 업로드 파일은 20MB입니다. 더 이상 Web.Config를 어떻게 시작해야 할까요?
2. 업로드 파일 크기 설정
1. 애플리케이션 수준 설정
파일 업로드 크기를 설정하려면 ConfigureServices 메서드에 다음 코드를 추가해야 합니다. 60MB로 제한됩니다.
public void ConfigureServices(IServiceCollection services) { servicesConfigure<FormOptions>(options => { optionsMultipartBodyLengthLimit = 60000000; }); }
2. 작업 수준 설정
위의 전역 설정 외에도 필터를 사용자 정의하여 단일 Action의 경우 Filter 코드는 다음과 같습니다.
[AttributeUsage(AttributeTargetsClass | AttributeTargetsMethod, AllowMultiple = false, Inherited = true)] public class RequestFormSizeLimitAttribute : Attribute, IAuthorizationFilter, IOrderedFilter { private readonly FormOptions _formOptions; public RequestFormSizeLimitAttribute(int valueCountLimit) { _formOptions = new FormOptions() { ValueCountLimit = valueCountLimit }; } public int Order { get; set; } public void OnAuthorization(AuthorizationFilterContext context) { var features = contextHttpContextFeatures; var formFeature = featuresGet<IFormFeature>(); if (formFeature == null || formFeatureForm == null) { // Request form has not been read yet, so set the limits featuresSet<IFormFeature>(new FormFeature(contextHttpContextRequest, _formOptions)); } } }
ASP.NET Core MVC에서는 이전 버전과의 차이점은 특정 기능이 캡슐화된다는 것입니다. 다양한 기능 중에서 HttpContext 컨텍스트는 각 기능을 관리할 수 있는 컨테이너일 뿐입니다. 이 필터에서는 Action만 가로채고, HttpContext의 FormFeature(양식 제출 기능 담당)를 재설정하여 특정 Action이 업로드하는 파일 크기를 제한하는 목적을 달성합니다.
3. 결론
파일 업로드 버그가 발견된 것 같았으나 1.0.1 버전에서 수정된 것으로 확인되었습니다. 버전 1.0.0에서는 작업이 IFromFile을 매개 변수로 설정하지 않으면 Request.From.Files에 액세스할 수 없으며 예외가 보고됩니다.