[[Open棟梁>https://github.com/OpenTouryoProject]] wiki -[[戻る>アップロード・ダウンロード]] *目次 [#o07f733a] #contents *概要 [#l965ca7e] .NETによるファイルのアップロード処理 *詳細 [#l19110c4] -ブラウザからアップロードする場合は、<INPUT type="file">を使用する。 -これによりwwwブラウザからHTTPのマルチパートメッセージボディを使用してファイルをアップロードすることが可能である。 -サーバ側ではHttpPostedFileクラスのメソッドを使用して、受信したファイル データをファイルに保存する(マルチパートメッセージボディは、複数ファイルのアップロードに対応している)。 -ファイルのアップロード時、アップロード中のデータは、全てASP.NETプロセスのメモリに蓄積される。~ このため、巨大なファイルがアップロードされる場合は、ASP.NETプロセスの使用するメモリ量が膨張し、メモリ不足になる可能性があるので注意する(多重度なども影響する)。 -このため、web.configにアップロード可能なファイルの最大サイズを設定しておくと良い 。~ wwwブラウザはファイルのアップロード時に、ファイルサイズをHTTPヘッダのContent-Length属性に付加するので、設定値を超えるファイルのアップロード要求をファイル受信前に拒否できる。 <httpRuntime maxRequestLength="4096" executionTimeout="90"/> **ブラウザからアップロード [#e8452537] -@IT > Insider.NET > .NET TIPS > [ASP.NET]~ ブラウザからファイルをアップロードできるようにするには?~ http://www.atmarkit.co.jp/fdotnet/dotnettips/321uploadform/uploadform.html --[ASP.NET]バイナリ・データをアップロードしてデータベースに登録するには?~ http://www.atmarkit.co.jp/fdotnet/dotnettips/253aspdbbinary/aspdbbinary.html --[ASP.NET]アップロードされたファイルをPostedFileプロパティにより取得するには?~ http://www.atmarkit.co.jp/fdotnet/dotnettips/322postedfile/postedfile.html **.NETからアップロード [#t3eb88ca] アップロードの.NET実装は以下の様になる。 protected string UOC_btnMButton1_Click(FxEventArgs fxEventArgs) { HttpPostedFile posted = Request.Files["userfile"]; if (posted.FileName != "") { posted.SaveAs( "c:\\UploadedFiles\\" + System.IO.Path.GetFileName(posted.FileName)); } return ""; } **メモリ不足の問題 [#qc0f127e] アップロードするファイルのサイズによってはメモリ不足が発生する。~ #アップロードが完了するまでAPサーバがデータをメモリに保持するため。 メモリ不足の問題を解決するには、WCF のストリーミング転送モードを使用してアップロード処理を実装する必要がある 。 -MSDNライブラリ > .NET開発 > WCF機能の詳細~ データ転送とシリアル化 > 大規模データとストリーミング~ http://msdn.microsoft.com/ja-jp/library/ms733742.aspx