[[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


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS