如何在ASP.NET Core中上传超大文件

默认情况下,ASP.NET Core只允许您上载最大大小约为28 MB的文件。但是,有时您希望突破此限制,想要上传更大的文件到服务器。那这时你该怎么办呢?这正是本篇文章想要介绍的:在.NET Core中如何实现上传超大文件的功能。

假设你现在有如下一个上传超大文件的页面:

如下是该页面的Razor代码:

 

<h1>Upload Large File</h1> <h2>@ViewData["message"]</h2> <form asp-controller="Home" asp-action="Upload" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <br /><br /> <button type="submit">Upload File</button> </form>

 

注意form标签里的enctype属性:multipart/form-data 这句话的主要作用就是告诉浏览器这表单上传的是个文件。

Home控制器里的Upload方法代码如下:

 

public IActionResult Upload (IFormFile file,[FromServices] IHostingEnvironment env) { string fileName = $"{env.WebRootPath}\\{file.FileName}"; using (FileStream fs = System.IO.File.Create(fileName)) { file.CopyTo(fs); fs.Flush(); } ViewData["message"] = $"{file.Length} bytes uploaded successfully!"; return View("Index"); }

 

 

这段代码就不详细说了,主要就是把文件上传到服务器的网站根目录。此时,如果我们上传一个大的文件,比如上传一个100M的文件,如果您使用的是IIS Express,则会收到以下错误消息:

如果你是运行在Kestrel上,则会出现如下错误:

 

在IIS上的解决方案

1.首先,在你的项目的web.config文件里添加如下一段代码:

 

<system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="209715200" /> </requestFiltering> </security> </system.webServer>

 

这段代码的关键:requestLimits maxAllowedContentLength="209715200" 。这句话的意思就是把允许上传的最大文件设置为200M。这个值,你们可以根据自己项目的需要实际设置。这里,我们先暂时设置成200M。这时,我们再跑一下项目,会发现404错误已经不见了,取而代之的是另一种错误:

这段错误代码的意思是表单上传的文件长度超过了134217727KB,要解决这个问题,我们只有在Home控制器里的Upload方法前加入如下属性声明:[RequestFormLimits(MultipartBodyLengthLimit = 209715200)]

 

[HttpPost]
[RequestFormLimits(MultipartBodyLengthLimit = 209715200)] public IActionResult Upload(IFormFile file, [FromServices] IHostingEnvironment env) { ... ... }

 

在这里我们把表单上传的最大文件长度设置为209715200(这里的单位是bit)也就200M。

这时,我们再试运行下程序,上传100M的文件,就没问题了,效果如下:

 

2.在Kestrel中的解决方案

如果你的程序时运行在Kestrel上,你可以在应用程序级别(整个系统),或者是Action级别控制上传文件的大小。

你如果要在Action级别控制上传文件的大小,你需要设置两个属性[RequestSizeLimit] 和 [RequestFormLimits].

[RequestSizeLimit]属性设置请求的最大长度(以字节为单位),而[RequestFormLimits]设置多部分正文长度的最大长度。

具体代码如下:

 

[HttpPost]
[RequestFormLimits(MultipartBodyLengthLimit = 209715200)] [RequestSizeLimit(209715200)] public IActionResult Upload(IFormFile file, [FromServices] IHostingEnvironment env) { ... ... }

 

如果您希望为整个应用程序设置这些限制,那么修改您需要修改program.cs和startup.cs。

打开program.cs并按如下所示设置Kestrel限制:

 

public static IWebHostBuilder CreateWebHostBuilder (string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseKestrel(options => { options.Limits.MaxRequestBodySize = 209715200; });

 

上面的代码是把最大的请求长度设置为200M。

现在,再在ConfigureServices方法中加入如下一段代码:

 

public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.Configure<FormOptions>(x => { x.MultipartBodyLengthLimit = 209715200; }); }

好了,通过如上设置,你在Kestrel中也可以上传超过系统默认设置的文件了。

 

 

原文转自:http://www.dalbll.com/Group/Topic/ASP.NET/6088

转载于:https://www.cnblogs.com/skytitan/p/11325137.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.Net Core MVC上传文件,可以使用以下步骤: 1. 在视图添加一个表单,包含一个文件输入控件: ```html <form method="post" enctype="multipart/form-data"> <div class="form-group"> <label for="file">选择文件:</label> <input type="file" name="file" id="file" class="form-control-file" /> </div> <button type="submit" class="btn btn-primary">上传</button> </form> ``` 2. 在控制器添加一个动作方法,用于接收上传文件: ```csharp [HttpPost] public async Task<IActionResult> Upload(IFormFile file) { if (file == null || file.Length == 0) { return BadRequest("请选择文件"); } using (var stream = new MemoryStream()) { await file.CopyToAsync(stream); // 处理上传文件 // ... return Ok("上传成功"); } } ``` 3. 在Startup.cs文件的ConfigureServices方法添加文件上传服务: ```csharp services.AddMvc(options => { options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute()); // 添加防伪标记,防止跨站攻击 }).AddRazorPagesOptions(options => { options.Conventions.AddPageRoute("/Index", ""); }) .AddNewtonsoftJson(); // 添加NewtonsoftJson,用于序列化JSON services.AddControllersWithViews(); // 添加控制器和视图 services.AddRazorPages(); // 添加Razor页面 services.AddAntiforgery(); // 添加防伪标记,防止跨站攻击 services.Configure<IISServerOptions>(options => { options.AllowSynchronousIO = true; // 允许同步IO }); services.Configure<FormOptions>(options => { options.MultipartBodyLengthLimit = long.MaxValue; // 设置允许上传的最大文件大小 }); ``` 以上就是在ASP.Net Core MVC上传文件的步骤。需要注意的是,要添加防伪标记,防止跨站攻击;要设置允许上传的最大文件大小。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值