2025年7月23日 星期三

IIS - 檔案上傳的限制(新版IIS需要設定兩個地方)fileupload limitation

 FAQ,但新版IIS需要設定兩個地方才會運作(開放檔案上傳的限制)

以Web.config 為例, .NET 4.x版(.NET Framework 4.x版)為例


以前只要設定一個地方即可

新版IIS需要設定兩個地方才行:

 

以Web.config 為例, .NET 4.x版(.NET Framework 4.x版)為例

<syste.web>

  <!-- 250 秒可執行時間長度,檔案限制 307 MB  ( Unit: Kilo Bytes。注意!!這裡的單位是KB = 307,200 KB) -->
   <httpRuntime targetFramework="4.8" enableVersionHeader="False" executionTimeout="250" maxRequestLength="307200" />

</system.web>

 

 <system.webServer> 

        <security>
           <requestFiltering>  <!--file upload limitation -->
               <!-- 300 秒可執行時間長度,檔案限制 307 MB ( 307,200,000 "Bytes"。 注意!跟上面的單位 "KB" 不一樣喔!) -->
               <requestLimits maxAllowedContentLength="307200000" maxUrl="6144" maxQueryString="3072" />
           </requestFiltering>
       </security>
  
  <!-- ********************************************************* -->
 </system.webServer> 

 

底下(第二個設定)可以在IIS裡面找到

IIS fileupload limitation (MIS2000 Lab.)

IIS fileupload limitation (MIS2000 Lab.)


但第一個設定,必須手動進入 Web.config設定檔修改。

以上是以 .NET 4.x版(.NET Framework 4.x版)為例

 


 

===================================================

如果是 ASP .NET Core MVC該如何處理?  (.NET Core / 開源 .NET / 開放原始碼 .NET )

=================================================== 

除了上面IIS的 Web.Config(如下),您仍要設定以外。或是透過 IIS管理畫面來調整(請參閱上面兩張圖片)

 <system.webServer> 

        <security>
           <requestFiltering>  <!--file upload limitation -->
               <!-- 300 秒可執行時間長度,檔案限制 307 MB ( 307,200,000 "Bytes"。 注意!檔案大小的單位!) -->
               <requestLimits maxAllowedContentLength="307200000" maxUrl="6144" maxQueryString="3072" />
           </requestFiltering>
       </security>
  
  <!-- ********************************************************* -->
 </system.webServer> 

 

ASP.NET Core MVC的「設定檔」修改如下。請特別注意一開始的「builder」關鍵字,

因為 Program.cs設定檔分成 : 上 / 下兩個部分,不要搞錯。

這些的設定是放在「上半部」

      // 如果不知道什麼是 Kestrel ,請看下面補充說明。 

       builder.WebHost.ConfigureKestrel(options =>
       {
           options.Limits.MaxRequestBodySize = 1073741824;   // 註解: 1GB。單位是 Bytes
       });

 

           builder.Services.Configure<FormOptions>(options =>
          {

             // 參考範例,檔案上傳大小,限制256 MB 
             //      options.MultipartBodyLengthLimit = 268435456;

              options.ValueLengthLimit = int.MaxValue;   // 後面的數值,請自己填入檔案大小的數字,單位是 Bytes. 
              options.MultipartBodyLengthLimit = int.MaxValue;
              options.MultipartHeadersLengthLimit = int.MaxValue;
          });

 

MVC的 控制器 (Controller)或是 動作 (Action) 裡面

     [HttpPost]
     [RequestSizeLimit(1073741824)]     // 註解: 1GB。單位是 Bytes

            // 完全取消限制,但真心 "不建議" 這樣做!  [DisableRequestSizeLimit] 
     public IActionResult Upload(IFormFile file)
     {
        // 處理檔案上傳
     }

 

註解與補充:(資料來源:CoPilot - AI)

Kestrel 是 ASP.NET Core "內建"的跨平台 Web 伺服器,用來處理 HTTP 要求。當你在 Windows、Linux 或 macOS 上開發 ASP.NET Core 應用程式時,Kestrel 是預設的伺服器。

– 它速度快、效能好,適合用於開發與生產環境。
– 在 Windows 上部署時,Kestrel 通常會搭配 IIS 使用。

當你在 Windows 上使用 IIS 發佈 ASP.NET Core 應用程式時,其實是這樣運作的:

– IIS 接收來自瀏覽器的請求。
– IIS 透過一個叫做 ASP.NET Core Module (ANCM) 的中介,把請求轉交給 Kestrel。
– Kestrel 處理請求,然後回傳結果給 IIS,再由 IIS 回傳給瀏覽器。
所以即使你「只用 IIS」,其實背後還是有 Kestrel 在運作。

 

 

沒有留言: