Help and Support
 

powered byLive Search

Visual Basic .NET を使用して ASP.NET の Web サーバーにファイルをアップロードする方法

文書番号:323245
最終更新日:2005年3月18日
リビジョン:5.3
目次

概要

この資料では、Visual Basic .NET を使用してファイルを Web サーバーにアップロードする方法を手順を追って説明します。この資料の手順では、ASP.NET ファイル (WebForm1.aspx) および関連するコード ビハインド ファイル (WebForm1.aspx.vb) を作成し、ファイルを Data という名前のディレクトリにアップロードします。


先頭へ戻る

ASP.NET アプリケーションを作成する

Microsoft Visual Studio .NET で、以下の手順に従って、ファイルを Web サーバーにアップロードする新しいアプリケーションを作成します。
1. Microsoft Visual Studio .NET を起動します。
2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
3. [新しいプロジェクト] ダイアログ ボックスで、[プロジェクトの種類] の [Visual Basic プロジェクト] をクリックし、[テンプレート] の [ASP.NET Web アプリケーション] をクリックします。
4. [場所] ボックスに、プロジェクトを作成する URL を入力します。この例では、http://localhost/VBNetUpload と入力し、[OK] をクリックします。これにより、プロジェクト名 VBNetUpload でプロジェクトが作成されます。Visual Studio .NET の [デザイナ] ビューに WebForm1.aspx ファイルが読み込まれます。

先頭へ戻る

Data ディレクトリを作成する

アプリケーションの作成後、ファイルのアップロード先となる Data ディレクトリを作成します。このディレクトリの作成後、書き込みのアクセス許可を ASPNET アカウントに設定する必要があります。
1. Visual Studio .NET の [ソリューション エクスプローラ] ウィンドウで、[VBNetUpload] を右クリックし、[追加] をポイントし、[新しいフォルダ] をクリックします。デフォルトで、NewFolder1 という名前で新しいフォルダが作成されます。
2. フォルダ名を Data に変更するには、[NewFolder1] を右クリックし、[名前の変更] をクリックし、Data と入力します。
3. エクスプローラを起動し、手順 2. で作成した Data ファイル システム フォルダに移動します。デフォルトでは、このフォルダは以下のフォルダ内にあります。
C:\Inetpub\wwwroot\VBNetUpload\Data
4. セキュリティ設定を変更して Data ディレクトリへの書き込みのアクセス許可を設定するには、[Data] を右クリックし、[プロパティ] をクリックします。
5. [Data のプロパティ] ダイアログ ボックスで、[セキュリティ] タブをクリックし、[追加] をクリックします。
6. [ユーザーまたはグループの選択] ダイアログ ボックスで、ASPNET アカウントをクリックし、[追加] をクリックします。[OK] をクリックして、[ユーザーまたはグループの選択] ダイアログ ボックスを閉じます。
7. aspnet_wp アカウント (computername\ASPNET) をクリックし、以下のアクセス許可の [許可] チェック ボックスをオンにします。Microsoft インターネット インフォメーション サービス (IIS) 6.0 を使用している場合は Network Service アカウントをクリックし、以下のアクセス許可の [許可] チェック ボックスをオンにします。
? 読み取りと実行
? フォルダの内容の一覧表示
? 読み取り
? 書き込み

その他のすべての [許可] および [拒否] チェック ボックスはオフにします。
8. [OK] をクリックして、[Data のプロパティ] ダイアログ ボックスを閉じます。これで、ユーザーがファイルをアップロードできるように、Data ディレクトリのアクセス許可が正しく変更されました。

先頭へ戻る

WebForm1.aspx ページを変更する

ユーザーがファイルをアップロードできるように、WebForm1.aspx ファイルの HTML コードを変更するには、次の手順を実行します。
1. 開かれている Visual Studio .NET のインスタンスに戻ります。[デザイナ] ウィンドウに WebForm1.aspx が表示されます。
2. WebForm1.aspx ページの HTML ソースを表示するには、[WebForm1.aspx] の [デザイナ] ウィンドウ内で右クリックし、[HTML ソースの表示] をクリックします。
3. <form> タグを含む次の HTML コードを見つけます。
<form id="Form1" method="post" runat="server">
					
4. 次のように、enctype="multipart/form-data" という名前と値の属性を <form> タグに追加します。
<form id="Form1" method="post" enctype="multipart/form-data" runat="server">
					
5. 開始 <form> タグの後に、次のコードを追加します。
<INPUT type=file id=File1 name=File1 runat="server" />
<br>
<input type="submit" id="Submit1" value="Upload" runat="server" />
					
6. HTML の <form> タグが次のようになっていることを確認します。
<form id="Form1" method="post" enctype="multipart/form-data" runat="server">
<INPUT type=file id=File1 name=File1 runat="server" />
<br>
<input type="submit" id="Submit1" value="Upload" runat="server" />
</form>
					

先頭へ戻る

WebForm1.aspx.vb コード ビハインド ファイルにアップロード コードを追加する

データをアップロードできるように WebForm1.aspx.vb コード ビハインド ファイルを変更するには、次の手順を実行します。
1. [表示] メニューの [デザイン] をクリックします。
2. [Upload] をダブルクリックします。Visual Studio により WebForm1.aspx.vb コード ビハインド ファイルが開き、次のメソッド コードが自動的に生成されます。
Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick
End Sub
					
3. WebForm1.vb ファイルのクラス レベルに以下のコードが存在することを確認します。
Protected WithEvents Submit1 As System.Web.UI.HtmlControls.HtmlInputButton
Protected WithEvents File1 As System.Web.UI.HtmlControls.HtmlInputFile
						
ファイルにこのコードが存在しない場合は、ファイルの次の行の後に上記のコードを追加します。
Inherits System.Web.UI.Page
					
4. 次のコードを探します。
Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick
					
5. Enter キーを押して空白行を追加し、以下のコードを追加します。
If Not File1.PostedFile Is Nothing And File1.PostedFile.ContentLength > 0 Then
Dim fn As String =                      System.IO.Path.GetFileName(File1.PostedFile.FileName)
Dim SaveLocation as String = Server.MapPath("Data") & "\" & fn
Try
   		File1.PostedFile.SaveAs(SaveLocation)
   		Response.Write("The file has been uploaded.")
Catch Exc As Exception
 	Response.Write("Error: " & Exc.Message)
End Try
Else
Response.Write("Please select a file to upload.")
End If
						
このコードでは、まず、ファイルがアップロードされたことを確認します。ファイルが選択されていない場合、"Please select a file to upload" というメッセージが表示されます。有効なファイルがアップロードされると、System.IO 名前空間を使用してそのファイル名が抽出され、そのアップロード先が SaveAs パスに組み立てられます。最終的なアップロード先の確定後、そのファイルは File1.PostedFile.SaveAs メソッドを使用して保存されます。例外はすべてトラップされ、例外メッセージが画面に表示されます。
6. Submit1 サブルーチンが次のようになっていることを確認します。
Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick
	If Not File1.PostedFile Is Nothing And File1.PostedFile.ContentLength > 0 Then
            Dim fn As String = System.IO.Path.GetFileName(File1.PostedFile.FileName)
            Dim SaveLocation as String = Server.MapPath("Data") & "\" & fn
            Try
                File1.PostedFile.SaveAs(SaveLocation)
                Response.Write("The file has been uploaded.")
            Catch Exc As Exception
                Response.Write("Error: " & Exc.Message)
            End Try
        Else
            Response.Write("Please select a file to upload.")
        End If
End Sub
					

先頭へ戻る

アプリケーションをテストする

この Visual Studio .NET ソリューションをビルドして、アプリケーションをテストするには、以下の手順を実行します。
1. [ビルド] メニューの [ソリューションのビルド] をクリックします。
2. [ソリューション エクスプローラ] で [WebForm1.aspx] を右クリックし、[ブラウザで表示] をクリックします。
3. ブラウザで WebForm1.aspx が開かれたら、[参照] をクリックします。
4. [ファイルの選択] ダイアログ ボックスで、4 MB 未満のファイルを選択して、[開く] をクリックします。
5. [Upload] をクリックしてファイルをアップロードします。そのファイルが Web サーバーにアップロードされ、"The file has been uploaded" というメッセージが表示されます。
6. 開かれているエクスプローラのインスタンスに戻り、Data ディレクトリに移動します。
7. ファイルが Data ディレクトリにアップロードされていることを確認します。

先頭へ戻る

大きなファイルをアップロードする

デフォルトでは、ASP.NET では 4,096 KB (4 MB) 以下のファイルのみを Web サーバーにアップロードすることができます。これよりも大きなファイルをアップロードするには、Web.config ファイルの <httpRuntime> セクションの maxRequestLength パラメータを変更する必要があります。

: Machine.config ファイルで maxRequestLength 属性が設定されていて、maxRequestLength の値を超える要求 (たとえば、ファイルのアップロード) が送信されると、カスタム エラー ページが表示されず、Microsoft Internet Explorer には "サーバーが見つからないか、DNS エラーです" というエラー メッセージが表示されます。

この ASP.NET アプリケーションだけでなく、コンピュータのすべてのアプリケーションの設定を変更する場合は、Machine.config ファイルを変更する必要があります。

デフォルトでは、<httpRuntime> 要素には、Machine.config ファイルで以下のパラメータが設定されています。
<httpRuntime 
executionTimeout="90" 
maxRequestLength="4096"
useFullyQualifiedRedirectUrl="false" 
minFreeThreads="8" 
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
/>
				
Machine.config ファイルは、\System Root\Microsoft.NET\Framework\Version Number\Config フォルダにあります。


先頭へ戻る

完全なコード リスト

WebForm1.aspx

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="VBNetUpload.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
  <HEAD>
    <title>WebForm1</title>
    <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
    <meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
    <meta name=vs_defaultClientScript content="JavaScript">
    <meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
  </HEAD>
  <body MS_POSITIONING="GridLayout">
    <form id="Form1" enctype="multipart/form-data" method="post" runat="server">
<INPUT type=file id=File1 name=File1 runat="server" >
<br>
<input type="submit" id="Submit1" value="Upload" runat="server" NAME="Submit1">
    </form>
  </body>
</HTML>
				

WebForm1.aspx.vb

Public Class WebForm1
    Inherits System.Web.UI.Page
    Protected WithEvents File1 As System.Web.UI.HtmlControls.HtmlInputFile
    Protected WithEvents Submit1 As System.Web.UI.HtmlControls.HtmlInputButton
#Region " Web Form Designer Generated Code "
    'This call is required by the Web Form Designer.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
    End Sub
    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: This method call is required by the Web Form Designer
        'Do not modify it using the code editor.
        InitializeComponent()
    End Sub
#End Region
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Put user code to initialize the page here
    End Sub
    Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick
        If Not File1.PostedFile Is Nothing And File1.PostedFile.ContentLength > 0 Then
            Dim fn As String = System.IO.Path.GetFileName(File1.PostedFile.FileName)
            Dim SaveLocation as String = Server.MapPath("Data") & "\" & fn
            Try
                File1.PostedFile.SaveAs(SaveLocation)
                Response.Write("The file has been uploaded.")
            Catch Exc As Exception
                Response.Write("Error: " & Exc.Message)
            End Try
        Else
            Response.Write("Please select a file to upload.")
        End If
    End Sub
End Class
				

先頭へ戻る

詳細

理論的には、アップロードできる最大のファイル サイズはかなり大きいものです。しかし、ASP.NET のヘルス モニタ処理のため、ASP.NET では大きいサイズのファイルをアップロードできません。ASP.NET のワーカー プロセスには、2 GB の仮想アドレス空間がありますが、ヘルス モニタ処理とメモリの断片化のため、ASP.NET のワーカー プロセスで利用できるメモリは 1 GB をやや上回る程度です。

ASP.NET では、アップロード中に、ファイル全体をメモリに読み込んでからファイルをディスクに保存します。このため、Machine.config ファイルの processModel タグにある memoryLimit 属性の設定によって、このプロセスがリサイクルされることがあります。memoryLimit 属性では、プロセスが自動的にリサイクルされるまで ASP.NET ワーカー プロセスで利用可能な物理メモリをパーセンテージで指定します。プロセスをリサイクルすることによって、メモリ リークによる ASP.NET のクラッシュや応答の停止を防止します。

また、アップロード可能な最大ファイル サイズに影響を与える要因は他にもあります。これには、使用できるメモリ、ハード ディスクの空き領域、プロセッサの速度、および、現在のネットワーク トラフィックが含まれます。標準的なトラフィックでファイル アップロードが行われている場合、10 〜 20 MB の範囲の最大ファイル サイズを使用することをお勧めします。ファイルのアップロードをまれにしか行わない場合は、最大ファイル サイズを 100 MB に設定することもできます。

: ASP.NET では 100 MB を超えるファイルをアップロードできますが、アップロードするファイルの最大サイズについては、この資料に記載されている内容に従うことを推奨します。ファイルの最大アップロード サイズをより厳密に決定するには、実際の運用環境に近いコンピュータでストレス テストを実行してください。

ファイルのアップロード処理の際にファイル サイズが制限を超えると、次のエラー メッセージが表示される場合があります。
?
ページを表示できません
?
サーバー アプリケーションは使用できません。
イベント ログには、次のようなエラー メッセージが出力されます。

aspnet_wp.exe (PID:PIDNumber) was recycled because memory consumption exceeded the SizeLimit MB (Percentage percent of available RAM).

?
種類 System.OutOfMemoryException の例外がスローされました。
また、アップロードが非常に低速になる場合もあります。Windows タスク マネージャで Aspnet_wp.exe プロセスを観察すると、メモリ使用量の増分が 1 〜 2 秒ごとに 64 KB ずつ変化していることがわかります。ファイルのサイズによっては、この遅延により responseDeadlock エラーが発生し、ASP.NET のワーカー プロセスがリサイクルされる場合があります。

先頭へ戻る

関連情報

詳細については、次の MSDN (Microsoft Developer Network) Web サイトを参照してください。
http://www.microsoft.com/japan/msdn/library/ja/cpgenref/html/gngrfhttpruntimesection.asp (http://www.microsoft.com/japan/msdn/library/ja/cpgenref/html/gngrfhttpruntimesection.asp)
http://www.microsoft.com/japan/msdn/library/ja/jpisdk/dhtml/references/objects/INPUT.asp (http://www.microsoft.com/japan/msdn/library/ja/jpisdk/dhtml/references/objects/INPUT.asp)
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwebuihtmlcontrolshtmlformclassenctypetopic.asp (http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwebuihtmlcontrolshtmlformclassenctypetopic.asp)
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfSystemWebUIHtmlControlsHtmlInputFileClassTopic.asp (http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfSystemWebUIHtmlControlsHtmlInputFileClassTopic.asp)
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfSystemWebUIHtmlControlsHtmlInputFileClassPostedFileTopic.asp (http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfSystemWebUIHtmlControlsHtmlInputFileClassPostedFileTopic.asp)

先頭へ戻る

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 323245 (http://support.microsoft.com/kb/323245/EN-US/) (最終更新日 2004-11-03) を基に作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。

先頭へ戻る


この資料は以下の製品について記述したものです。
?Microsoft ASP.NET 1.0
?Microsoft Visual Basic .NET 2002 Standard Edition
?Microsoft ASP.NET 1.1
?Microsoft Visual Basic .NET 2003 Standard Edition

先頭へ戻る

キーワード:?
kbprogramming kbhowtomaster kbservercontrols KB323245

先頭へ戻る

"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

サポート技術情報の翻訳

 

Other Support Options

  • Need More Help?
    Contact a Support professional by Email, Online or Phone.
  • Customer Service
    For non-technical assistance with product purchases, subscriptions, online services, events, training courses, corporate sales, piracy issues, and more.
  • Newsgroups
    Pose a question to other users. Discussion groups and Forums about specific Microsoft products, technologies, and services.