您的位置:首页 > 编程语言 > ASP

解决ASP.NET Core Mvc文件上传限制问题

2017-03-03 15:26 936 查看

阅读目录

回到目录

一、简介

  在ASP.NET Core MVC中,文件上传的最大上传文件默认为20MB,如果我们想上传一些比较大的文件,就不知道怎么去设置了,没有了Web.Config我们应该如何下手呢?

回到目录

二、设置上传文件大小

  1.应用程序级别设置

    我们需要在 ConfigureServices方法中添加如下代码,设置文件上传的大小限制为60 MB。

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.Configure<FormOptions>(options =>
  4. {
  5. options.MultipartBodyLengthLimit = 60000000;
  6. });
  7. }

  2.Action级别设置

    除了上面对全局进行设置外,我们也可以通过自定义Filter的方式,对单个Action进行控制,Filter代码如下:

  1. [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
  2. public class RequestFormSizeLimitAttribute : Attribute, IAuthorizationFilter, IOrderedFilter
  3. {
  4. private readonly FormOptions _formOptions;
  5. public RequestFormSizeLimitAttribute(int valueCountLimit)
  6. {
  7. _formOptions = new FormOptions()
  8. {
  9. ValueCountLimit = valueCountLimit
  10. };
  11. }
  12. public int Order { get; set; }
  13. public void OnAuthorization(AuthorizationFilterContext context)
  14. {
  15. var features = context.HttpContext.Features;
  16. var formFeature = features.Get<IFormFeature>();
  17. if (formFeature == null || formFeature.Form == null)
  18. {
  19. // Request form has not been read yet, so set the limits
  20. features.Set<IFormFeature>(new FormFeature(context.HttpContext.Request, _formOptions));
  21. }
  22. }
  23. }

   因为ASP.NET Core MVC中,与之前版本不同的是具体功能被封装在了各种Feature(特征)中,HttpContext上下文只是能各个特征进行管理的容器。这个Filter中就只将Action拦截,对HttpContext中的FormFeature(负责表单提交功能)重新进行设置,从而达到限制具体Action上传文件大小的目的。

回到目录

三、结语

   本来感觉像是发现了一个文件上传的BUG,已经确认在1.0.1版本中已经进行了修复。在1.0.0版本中,如果Action没有设置一个IFromFile作为参数,那么Request.From.Files将不能访问并且报出异常。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: