前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在ASP.NetCore增加文件上传大小

如何在ASP.NetCore增加文件上传大小

作者头像
leon公众号精选
发布于 2022-04-27 07:58:56
发布于 2022-04-27 07:58:56
5.2K00
代码可运行
举报
运行总次数:0
代码可运行

/ 如何在核心中增加文件 ASP.NET 大小 /

从ASP.NET 2.0开始最大请求正文大小限制为30MB (+28.6 MiB)。在正常情况下,无需增加 HTTP 请求 body 的大小。但是,当您尝试上传大型文件 (> 30MB) 时,需要增加默认允许的最大限制。在这篇简短的文章中,我们将了解如何在.netcore 应用程序中增加文件 ASP.NET 大小以及控制此限制的各种选项。

1

在核心中增加文件 ASP.NET 大小

正如我们所知 ASP.NET 是独立于平台的,因此您可以在 WindowsLinux 或 Mac 平台上托管它们。换句话说,您可以在 IIS、Ngnix 和 Apache Web 服务器上托管应用程序。Kestrel 是用于 asp.netcore 的跨平台的服务器,默认情况下包含在 netcore ASP.NET 中。Kestrel 可用作独立服务器或被其他服务器反向代理,如 IIS、Nginx 或 Apache。没有单一的解决方案可以覆盖所有的部署选项来增加请求大小限制。根据不同的部署选项,解决方案也不尽相同。我们可能有以下部署选项。

1、托管在 IIS 上(有凯斯特雷尔或没有凯斯特雷尔)

2、托管在 Kestrel 上(作为独立或与 Ngnix 和 Apache 服务器一起托管)

2

在 IIS 上

还能记得在 ASP.NET 中,我们曾经在 web.config 文件中通过设置增加 4MB 的默认限制。就像 maxRequestLength 节点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<configuration>
  <system.web>
    <httpRuntime maxRequestLength="xxx" />
  </system.web>
</configuration>

同样对于 ASP.NetCore 应用程序我们可以通过在文件设置中设置属性来增加默认的 30MB 的限制。默认的 ASP。NET Core 应用模板没有创建此文件。它在发布应用程序时创建。但是,您也可以使用以下代码将其手工添加(如果没有)到应用程序的根目录maxAllowedContentLengthweb.configweb.config

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`<?xml version="1.0" encoding="utf-8"?>
`<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- To customize the asp.net core module uncomment and edit the following section. 
  For more info see https://go.microsoft.com/fwlink/?linkid=838655 -->
  <system.webServer>
    <handlers>
      <remove name="aspNetCore"/>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
      <security>
        <requestFiltering>
          <!-- This will handle requests up to 50MB -->
          <requestLimits maxAllowedContentLength="52428800" />
        </requestFiltering>
      </security>
    </system.webServer>
</configuration>

您需要在 security 部分中进行定义。更多详情可百度maxAllowedContentLengthweb.config为了在 IIS 和 Kestrel 服务器之间创建反向代理,web.config 文件必须出现在已部署应用程序的内容根路径(通常是应用程序 basepath)。这是提供给 IIS 的网站物理路径的相同位置。此设置仅适用于 IIS。

3

托管在 Kestrel 上

从 ASP.NET Core 2.0 开始, Kestrel 服务器也强加了自己的默认限制。有 3 种不同的方法可以增加这个默认限制。

3.1

MVC 解决方案

如果你想改动一个特定的 MVC 接口或控制器的最大请求体大小限制,你可以使用属性。比如 RequestSizeLimit

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[HttpPost]
 [RequestSizeLimit(40000000)] 
 public async Task<IActionResult> UploadFiles(IFormFile file)
  { //TODO: Save file }

该 RequestSizeLimit 操作方法设置允许的最大请求长度。您可以在方法级别或控制器级别应用此属性。这是 ASP.netcore 应用中增加请求体最大限制的推荐方法。还有另一个适用于控制器级别或方法级别的属性来禁用 HTTP 请求的大小限制。这将把请求限制设置为无限制。比如, ableRequestSizeLimit

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[HttpPost] 
[DisableRequestSizeLimit] 
public async Task<IActionResult> UploadFiles(IFormFile file)
 { //TODO: Save file }

3.2

全局方案

要修改全局最大请求 body 大小,请为 Kestrel 设置选项。比如,MaxRequestBodySize

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static IWebHostBuilder CreateWebHostBuilder(string[] args) 
=> WebHost.CreateDefaultBuilder(args).UseStartup<Startup>()
.UseKestrel(options => 
{ options.Limits.MaxRequestBodySize = 52428800; //50MB }); }

这适用于整个应用程序的任何请求。该值是一个可空的长值。将它设置为 null 会禁用该限制。现在你可能会想,为什么这对 windows 不起作用,因为 IIS 也使用 Kestrel。原因是,这个设置对于运行在 IIS 后面的 Kestrel 来说是无效的,在 IIS 后面应用的是正常的 web.config 限制。虽然这是一个全局设置,但它可以通过中间件.MaxRequestBodySize 来覆盖每个请求。

3.3

中间件方案

如果你想基于请求覆盖全局设置,你可以通过中间件来实现。这样你就可以通过一些灵活的配置来修改单个请求。比如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app.UseWhen(context => 
context.Request.Path.StartsWithSegments("/api"), appBuilder 
=> { context.Features.Get<IHttpMaxRequestBodySizeFeature>()
.MaxRequestBodySize = null; //TODO: take next steps });

请记住,在读取请求体开始后,不能更改。如果你在应用开始读取请求后试图配置请求的限制,会抛出一个异常。有一个属性可以指示是否处于只读状态,也就是说来不及配置限制了。IsReadOnlyMaxRequestBodySize(只读最大请求体大小)

4

概要

综上所述,本帖提供了增加 ASP.NET Core 应用的请求限制大小的解决方案,涵盖了所有可能的部署方案。根据你的部署模式,你需要进行配置修改。不过,不管是哪种部署方案,如果有一个增加请求限制的单一解决方案,那将是最理想的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师高级俱乐部 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ASP.NET Core单文件和多文件上传并保存到服务端
  在我们日常开发中,关于图片,视频,音频,文档等相关文件上传并保存到服务端中是非常常见的一个功能,今天主要是把自己在开发中常用的两种方式记录下来方便一下直接使用,并且希望能够帮助到有需要的同学!
追逐时光者
2020/04/09
1.9K0
ASP.NET Core中如何更改文件上传大小限制maxAllowedContentLength属性值
Web.config中的maxAllowedContentLength这个属性可以用来设置Http的Post类型请求可以提交的最大数据量,超过这个数据量的Http请求ASP.NET Core会拒绝并报错,由于ASP.NET Core的项目文件中取消了Web.config文件,所以我们无法直接在visual studio的解决方案目录中再来设置maxAllowedContentLength的属性值。
跟着阿笨一起玩NET
2021/06/09
5.2K0
ASP.NET Core中如何更改文件上传大小限制maxAllowedContentLength属性值
Asp.NetCore轻松学-部署到 IIS 进行托管
经过一段时间的学习,终于来到了部署服务这个环节,.NetCore 的部署方式非常的灵活多样,但是其万变不离其宗,所有的 Asp.NetCore 程序都基于端口的侦听,在部署的时候仅需要配置侦听地址、端口(一个或者多个)即可,在掌握好其托管部署原理后,剩下的就是对托管宿主的选择,通过本文,希望可以带给大家一种清晰的部署思路,选择最适合自己的服务部署方式。
梁规晓
2019/04/11
2.9K0
Asp.NetCore轻松学-部署到 IIS 进行托管
设置IIS7文件上传的最大大小
设置IIS7文件上传的最大大小 maxAllowedContentLength,maxRequestLength
孤鸿
2022/09/23
1.2K0
你以为的ASP.NET文件上传大小限制是你以为的吗「建议收藏」
我们大家都知道ASP.NET为我们提供了文件上传服务器控件FileUpload,默认情况下可上传的最大文件为4M,如果要改变可上传文件大小限制,那么我们可以在web.config中的httpRuntime元素中添加maxRequestLength属性设置大小,同时为了支持大文件上传超时可以添加executionTimeout属性设置超时时间。网上有很多这样的例子,但实际情况是否是这样吗?
Java架构师必看
2022/02/01
2.4K0
你以为的ASP.NET文件上传大小限制是你以为的吗「建议收藏」
ASP.NET Core 在 IIS 下的两种部署模式
KestrelServer最大的优势体现在它的跨平台的能力,如果ASP.NET CORE应用只需要部署在Windows环境下,IIS也是不错的选择。ASP.NET CORE应用针对IIS具有两种部署模式,它们都依赖于一个IIS针对ASP.NET CORE Core的扩展模块。本文提供的示例演示已经同步到《ASP.NET Core 6框架揭秘-实例演示版》)
蒋金楠
2022/05/09
2.9K0
ASP.NET Core 在 IIS 下的两种部署模式
ASP.NET MVC+LayUI视频上传
前段时间在使用APS.NET MVC+LayUI做视频上传功能的时,发现当上传一些内存比较大的视频就会提示上传失败,后来通过查阅相关资料发现.NET MVC框架为考虑安全问题,在运行时对请求的文件的长度(大小)做了限制默认为4MB(4096KB),因此我们需要在Web.Config中设置最大请求文件长度大小,本篇博客主要讲解如何设置Web.Config中的最大请求文件大小配置和提供一个完整的ASP.NET MVC+LayUI上传视频的教程,并且会提供一个完整的示例(是上传到GitHub)有兴趣的可以耐心的往下看。
追逐时光者
2020/08/11
3K0
ASP.NET MVC+LayUI视频上传
ASP.NET CORE 启动过程及源码解读
在这个特殊的春节,大家想必都在家出不了门,远看已经到了回城里上班的日子,但是因为一只蝙蝠的原因导致我们无法回到工作岗位,大家可能有的在家远程办公,有些在家躺着看书,有的是在家打游戏;在这个特殊无聊的日子,从无聊的被窝中 开启了流量共享wifi 来进行.net core 3.1 源代码的解读和学习,并且把学习到的东西分享给大家。
Jlion
2022/04/07
4.6K0
ASP.NET CORE 启动过程及源码解读
使用最小WEB API实现文件上传
在现代Web开发中,文件上传是常见且重要的功能之一。无论是在社交媒体应用中分享图片,还是在企业系统中处理用户上传的文档,文件上传的需求几乎无处不在。作为一名资深程序员,了解如何在最小化的Web API环境中实现文件上传,能够帮助开发者快速搭建高效、易维护的系统。
Michel_Rolle
2024/11/27
2.7K0
Asp.net支持的最大上传文件大小
Asp.net的默认的最大可以上载的文件是4M,可以在web.config中配置.
Java架构师必看
2021/03/22
2.5K0
分享一篇关于C#大文件上传的整个过程
1、创建一个web mvc项目,在创建一个webservice文件夹,在文件夹下创建一个SaveFileWebForm.axpx接口,
用户7053485
2020/03/12
2.8K0
ASP.NET Core WebApi分布式文件系统FastDFS实战演练
关于FastDFS与ASP.NET Core WebApi相结合的详细的代码已经最后一章节提供给大家进行下载了。
跟着阿笨一起玩NET
2021/02/02
7250
ASP.NET 5 Beta 8 发布
ASP.NET 5 的路线图(详见 ASP.NET 5 Schedule and Roadmap : https://github.com/aspnet/home/wiki/roadmap ):Beta8版本在10月15日发布了,在微软的.NET Web开发工具博客上发布了详细的说明文章:http://blogs.msdn.com/b/webdev/archive/2015/10/15/announcing-availability-of-asp-net-5-beta8.aspx 。 ASP.NET 5
张善友
2018/01/30
1.5K0
Asp.NetCore轻松学-部署到 Linux 进行托管
上一篇文章介绍了如何将开发好的 Asp.Net Core 应用程序部署到 IIS,且学习了进程内托管和进程外托管的区别;接下来就要说说应用 Asp.Net Core 的特性(跨平台),将 .NetCore 部署到 Linux 中,主流的 Linux 有多个版本的操作系统,这里以 Centos-7.5 为例子,其它版本的操作系统下的部署基本都是大同小异的,除了了一些命令上的区别。
梁规晓
2019/04/11
1K0
Asp.NetCore轻松学-部署到 Linux 进行托管
视频太大上传提示404.13其实是请求字节限制的问题
The request filtering module is configured to deny a request that exceeds the request content length.
西柚dzh
2022/06/09
5470
视频太大上传提示404.13其实是请求字节限制的问题
[Asp.Net Core] 1. IIS中的 Asp.Net Core 和 dotnet watch
在基于传统的.NET Framework的Asp.Net Mvc的时候,本地开发环境中可以在IIS中建立一个站点,可以直接把站点的目录指向asp.net mvc的项目的根目录。然后build一下就可以在浏览器里面刷新到最新的修改了,也可以附加到w3wp的进程进行调试。但是在开发基于.Net Core的Asp.Net Core项目的时候,这样的做法已经无法满足我们的需要了: 更改完代码build一下,无需部署即可在浏览器得到最新的更改。 附加到进程调试。 Asp.Net Core的项目需要先Pubilsh一下
blackheart
2018/01/19
1.8K0
[Asp.Net Core] 1. IIS中的 Asp.Net Core 和 dotnet watch
ASP.NET Core模块概述
原文地址:ASP.NET Core Module overview By Tom Dykstra, Rick Strahl, and Chris Ross ASP.NET Core模块(ANCM)让你能够在IIS之后运行ASP.NET Core应用,IIS和Kestrel各司其职,前者专于安全性,可管理性等方面,后者专于性能,我们从两种技术中都能获得益处。ANCM只和Kestrel协同工作,它不兼容于Weblistener。 支持的Windows版本: Windows 7和Windows Server 20
潘成涛
2018/01/18
1.8K0
ASP.NET Core模块概述
.NET Core 3.0之深入源码理解Kestrel的集成与应用(一)
ASP.NET Core 的 Web 服务器默认采用Kestrel,这是一个跨平台、轻量级的Web服务器(需要指出的是从 ASP.NET Core 2.1 开始 Kestrel 就不基于 libuv 了 "Starting in ASP.NET Core 2.1.0, managed sockets will be replacing libuv as Kestrel's default transport." 详见 https://github.com/aspnet/Announcements/issues/296)。
AI.NET 极客圈
2019/07/19
1.9K0
ASP.NET Core 2.0 : 五.服务是如何加载并运行的, Kestrel、配置与环境
"跨平台"后的ASP.Net Core是如何接收并处理请求的呢? 它的运行和处理机制和之前有什么不同? 本章从"宏观"到"微观"地看一下它的结构以及不同时期都干了些什 本章主要内容如下: ASP.NE
FlyLolo
2018/05/17
1.1K0
.Net4.0 Web.config 配置实践
当通过.NET 新建一个Web应用程序项目后,默认情况下会在根目录自动创建一个默认的Web.config文件,其是一个XML文本文件,内容包括运行应用默认的所有运行基础配置。
初九之潜龙勿用
2024/06/20
2020
相关推荐
ASP.NET Core单文件和多文件上传并保存到服务端
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验