ASP.NET MVC 3 for Beginners:サーバーへのファイルのアップロード

画像



新技術を学習する過程で、新参者は多くの場合、それほど簡単に解決できない典型的なタスクに直面します。 初心者向けの一連のMVC3記事で、このような問題の解決策を紹介します。



最近、エカテリンブルクでASP.NETについて話した開発者向けの会議で、MVC3とRazorを使用して、クライアントからサーバーへの1つ以上のファイルのアップロードを整理する方法について質問を受けました。 ASP.NET MVC3で非常に簡単かつエレガントに解決される非常に典型的なタスク。



以下は、ソースコードを含む完全なソリューションです。



マークアップ



まず、HomeコントローラーのIndex.cshtmlページのマークアップを作成しましょう。



<h2>  </h2> <p> @using (Html.BeginForm("", "home", FormMethod.Post, new {enctype="multipart/form-data"})) { <input type="file" name="fileUpload" /><br /> <input type="submit" name="Submit" id="SubmitSingle" value="Upload" /> } </p> <h2>  </h2> <p> @using (Html.BeginForm("", "home", FormMethod.Post, new {enctype="multipart/form-data"})) { <input type="file" name="fileUpload[0]" /><br /> <input type="file" name="fileUpload[1]" /><br /> <input type="file" name="fileUpload[2]" /><br /> <input type="submit" name="Submit" id="SubmitMultiply" value="Upload" /> } </p>
      
      





考慮すべき重要な点がいくつかあります。 ご覧のとおり、マークアップコードは簡単です。



コントローラーのアクションコード



Post属性といくつかのパラメーターを指定したIndexアクションを持つHomeコントローラーを追加します。



 [HttpPost] public ActionResult Index(IEnumerable<HttpPostedFileBase> fileUpload) { foreach (var file in fileUpload) { if (file == null) continue; string path = AppDomain.CurrentDomain.BaseDirectory + "UploadedFiles/"; string filename = Path.GetFileName(file.FileName); if (filename != null) file.SaveAs(Path.Combine(path, filename)); } return RedirectToAction("Index"); }
      
      





ここにはいくつかの重要なポイントがあります。 もう一度見ることができるように、アクションコードはマークアップコードと同じくらい簡単です。



リクエストサイズとweb.configの制限



ASP.NETには、サーバーに送信できるリクエストのサイズに制限があります。 この制限は、特にセキュリティ上の理由と、大量のリクエストを生成することでサーバーへの攻撃を簡単に防ぐために導入されました。 それでも、サーバーにファイルをアップロードするための機能を作成する場合、特にファイルがいくつかあり、サイズが大きくなる場合は、最初に制限パラメーターを目的の値に構成する必要があります。



最大リクエストサイズを制御するパラメーターはweb.configにあります。



 <system.web> <!--   --> <httpRuntime maxRequestLength="10000" />
      
      





maxRequestLengthパラメーターは、リクエストが持つことができる最大サイズをキロバイト単位で指定します。 したがって、上記のコードでは、リクエストの制限は最大10メガバイトです。 つまり、ユーザーは1回の要求で約10メガバイトのサイズのファイルを転送できます。 リクエストがデータだけでなく、リクエストデータを形成するバインディングでも構成されていることのみを考慮してください。 このバインディングは小さいですが、要求のサイズに必要な制限を計算するときに考慮する必要があります。



プロジェクトのソースコード



このリンクからVisual Studio 2010の作業プロジェクトのソースコードをダウンロードできます。



All Articles