ASPでの使用方法NET Coreで超大ファイルをアップロード

10811 ワード

デフォルトでは、ASP.NET Coreでは、最大サイズが約28 MBのファイルのみをアップロードできます.ただし、この制限を突破して、より大きなファイルをサーバにアップロードしたい場合があります.どうすればいいの?これはまさにこの文章が紹介したいのです:はい.NET Coreでは、超大ファイルをアップロードする機能をどのように実現するか.
次のような大きなファイルをアップロードするページがあるとします.
このページのRazorコードは次のとおりです.
 
<h1>Upload Large File</h1> 

@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という言葉の主な役割は、ブラウザにこのフォームにアップロードされているファイルを伝えることです.
ホームコントローラの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"); }

 
 
このコードは詳しくは言いませんが、主にサーバーのサイトのルートディレクトリにファイルをアップロードします.このとき、100 Mのファイルをアップロードするなど、大きなファイルをアップロードすると、IIS Expressを使用している場合は、次のエラーメッセージが表示されます.
Kestrelで実行している場合は、次のエラーが発生します.
 
IISでのソリューション:
1.まず、あなたのプロジェクトのwebで.configファイルには、次のコードが追加されます.
 
<system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="209715200" /> </requestFiltering> security> system.webServer>

 
このコードのキー:requestLimits maxAllowedContentLength="209712200".この文の意味は、アップロードが許可されている最大ファイルを200 Mに設定することです.この値は、自分のプロジェクトの必要に応じて実際に設定することができます.ここでは、まず200 Mに設定します.このとき、私たちはもう一度プロジェクトを走ってみると、404の間違いがなくなったことに気づき、代わりに別の間違いがあります.
このエラーコードは、フォームにアップロードされたファイルの長さが134217727 KBを超えていることを意味します.この問題を解決するには、ホームコントローラのUploadメソッドの前に、[RequestFormLimits(M u l t i p artBodyLengthLimit=209715200)]という属性宣言を追加する必要があります.
 
[HttpPost]
[RequestFormLimits(MultipartBodyLengthLimit = 209715200)] public IActionResult Upload(IFormFile file, [FromServices] IHostingEnvironment env) { ... ... }

 
ここではフォームにアップロードされる最大ファイル長を209715200(ここでの単位はbit)に設定して200 Mにします.
この時、私たちは再びプログラムを実行して、100 Mのファイルをアップロードして、大丈夫で、効果は以下の通りです:
 
2.Kestrelでのソリューション
プログラムがKestrel上で実行されている場合は、アプリケーション・レベル(システム全体)、またはActionレベルでアップロード・ファイルのサイズを制御できます.
アクションレベルでアップロードファイルのサイズを制御するには、2つのプロパティ[RequestSizeLimit]と[RequestFormLimits]を設定する必要があります.
[RequestSizeLimit]プロパティは、要求の最大長をバイト単位で設定し、[RequestFormLimits]は、複数の本文の長さの最大長を設定します.
具体的なコードは以下の通りです.
 
[HttpPost]
[RequestFormLimits(MultipartBodyLengthLimit = 209715200)] [RequestSizeLimit(209715200)] public IActionResult Upload(IFormFile file, [FromServices] IHostingEnvironment env) { ... ... }

 
アプリケーション全体にこれらの制限を設定する場合は、programを変更する必要があります.csとstartup.cs.
プログラムを開くcsは、次のようにKestrel制限を設定します.
 
public static IWebHostBuilder CreateWebHostBuilder (string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseKestrel(options => { options.Limits.MaxRequestBodySize = 209715200; });

 
上のコードは、最大のリクエスト長を200 Mに設定しています.
次に、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