日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

netcore 图片 文件大小_NetCore 3.0文件上传和大文件上传的限制详解

發(fā)布時間:2023/11/27 生活经验 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 netcore 图片 文件大小_NetCore 3.0文件上传和大文件上传的限制详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。