解決ASP.NET Core Mvc文件上傳限制問題


一、簡介

  在ASP.NET Core MVC中,文件上傳的最大上傳文件默認為20MB,如果我們想上傳一些比較大的文件,就不知道怎么去設置了,沒有了Web.Config我們應該如何下手呢?

二、設置上傳文件大小

  1.應用程序級別設置

    我們需要在 ConfigureServices方法中添加如下代碼,設置文件上傳的大小限制為60 MB。

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<FormOptions>(options =>
    {
        options.MultipartBodyLengthLimit = 60000000;
    });
}

  2.Action級別設置

    除了上面對全局進行設置外,我們也可以通過自定義Filter的方式,對單個Action進行控制,Filter代碼如下:

  [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, 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 = context.HttpContext.Features;
            var formFeature = features.Get<IFormFeature>();

            if (formFeature == null || formFeature.Form == null)
            {
                // Request form has not been read yet, so set the limits
                features.Set<IFormFeature>(new FormFeature(context.HttpContext.Request, _formOptions));
            }
        }
    }

   因為ASP.NET Core MVC中,與之前版本不同的是具體功能被封裝在了各種Feature(特征)中,HttpContext上下文只是能各個特征進行管理的容器。這個Filter中就只將Action攔截,對HttpContext中的FormFeature(負責表單提交功能)重新進行設置,從而達到限制具體Action上傳文件大小的目的。

三、結語

   本來感覺像是發現了一個文件上傳的BUG,已經確認在1.0.1版本中已經進行了修復。在1.0.0版本中,如果Action沒有設置一個IFromFile作為參數,那么Request.From.Files將不能訪問並且報出異常。

 

GitHub:https://github.com/maxzhang1985/YOYOFx  如果覺還可以請Star下, 歡迎一起交流。

 

.NET Core 開源學習群: 214741894  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM