netcore 图片 文件大小_NetCore 3.0文件上传和大文件上传的限制详解
NetCore文件上傳兩種方式
NetCore官方給出的兩種文件上傳方式分別為“緩沖”、“流式”。我簡單的說說兩種的區(qū)別,
1.緩沖:通過模型綁定先把整個文件保存到內(nèi)存,然后我們通過IFormFile得到stream,優(yōu)點(diǎn)是效率高,缺點(diǎn)對內(nèi)存要求大。文件不宜過大。
2.流式處理:直接讀取請求體裝載后的Section 對應(yīng)的stream 直接操作strem即可。無需把整個請求體讀入內(nèi)存,
以下為官方微軟說法
緩沖
整個文件讀入 IFormFile,它是文件的 C# 表示形式,用于處理或保存文件。 文件上傳所用的資源(磁盤、內(nèi)存)取決于并發(fā)文件上傳的數(shù)量和大小。 如果應(yīng)用嘗試緩沖過多上傳,站點(diǎn)就會在內(nèi)存或磁盤空間不足時崩潰。 如果文件上傳的大小或頻率會消耗應(yīng)用資源,請使用流式傳輸。
流式處理
從多部分請求收到文件,然后應(yīng)用直接處理或保存它。 流式傳輸無法顯著提高性能。 流式傳輸可降低上傳文件時對內(nèi)存或磁盤空間的需求。
文件大小限制
說起大小限制,我們得從兩方面入手,1應(yīng)用服務(wù)器Kestrel 2.應(yīng)用程序(我們的netcore程序),
1.應(yīng)用服務(wù)器Kestre設(shè)置
應(yīng)用服務(wù)器Kestrel對我們的限制主要是對整個請求體大小的限制通過如下配置可以進(jìn)行設(shè)置(Program -> CreateHostBuilder),超出設(shè)置范圍會報 BadHttpRequestException: Request body too large異常信息
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureKestrel((context, options) =>
{
//設(shè)置應(yīng)用服務(wù)器Kestrel請求體最大為50MB
options.Limits.MaxRequestBodySize = 52428800;
});
webBuilder.UseStartup();
});
2.應(yīng)用程序設(shè)置
應(yīng)用程序設(shè)置 (Startup->? ConfigureServices) 超出設(shè)置范圍會報InvalidDataException 異常信息
services.Configure(options =>
{
options.MultipartBodyLengthLimit = long.MaxValue;
});
通過設(shè)置即重置文件上傳的大小限制。
源碼分析
這里我主要說一下 MultipartBodyLengthLimit? 這個參數(shù)他主要限制我們使用“緩沖”形式上傳文件時每個的長度。為什么說是緩沖形式中,是因?yàn)槲覀兙彌_形式在讀取上傳文件用的幫助類為 MultipartReaderStream 類下的 Read 方法,此方法在每讀取一次后會更新下讀入的總byte數(shù)量,當(dāng)超過此數(shù)量時會拋出? throw new InvalidDataException($"Multipart body length limit {LengthLimit.GetValueOrDefault()} exceeded.");? 主要體現(xiàn)在 UpdatePosition 方法對 _observedLength? 的判斷
以下為 MultipartReaderStream 類兩個方法的源代碼,為方便閱讀,我已精簡掉部分代碼
Read
public override int Read(byte[] buffer, int offset, int count)
{
var bufferedData = _innerStream.BufferedData;
int read;
read = _innerStream.Read(buffer, offset, Math.Min(count, bufferedData.Count));
return UpdatePosition(read);
}
UpdatePosition
總結(jié)
以上是生活随笔為你收集整理的netcore 图片 文件大小_NetCore 3.0文件上传和大文件上传的限制详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 看到大家说GAY骗婚,正走在骗婚的路上?
- 下一篇: apache 安装后默认主页无法打开_C