方法 : FileUpload Web サーバー コントロールを使用してファイルをアップロードする

更新 : 2007 年 11 月

FileUpload Web サーバー コントロールを使用すると、ユーザーにそれぞれのコンピュータからサーバーにファイルを送信する方法を提供できます。アップロードされるファイルは、ポストバック中にブラウザ要求の一部としてサーバーに送信されます。ファイルのアップロードが完了すると、コードでファイルを管理できます。

ms227669.alert_note(ja-jp,VS.90).gifメモ :

アップロードできる最大のファイル サイズは MaxRequestLength 構成設定の値によって異なります。ユーザーが最大サイズよりも大きいファイルをアップロードしようとすると、アップロードは失敗します。

FileUpload Web サーバー コントロールを使用してファイルをアップロードするには

  1. FileUpload コントロールをページに追加します。

    ms227669.alert_note(ja-jp,VS.90).gifメモ :

    セキュリティ上の理由から、ファイル名を FileUpload コントロールにあらかじめロードすることはできません。

  2. ページの Load イベントなどのイベントのハンドラでは、次の処理を行います。

    1. FileUpload コントロールがアップロードされたファイルを持つことを、その HasFile プロパティをテストすることで確認します。

    2. ファイルの名前または MIME の種類を確認し、受け入れるファイルをユーザーがアップロード済みであることを確認します。MIME の種類を確認するには、FileUpload コントロールの PostedFile プロパティとして公開されている HttpPostedFile オブジェクトを取得します。その後、ポストされたファイルの ContentType プロパティを確認することによって MIME の種類を取得できます。

      ms227669.alert_security(ja-jp,VS.90).gifセキュリティに関するメモ :

      アップロードされたファイルの MIME の種類は、場合によっては詐称できるため、ファイルの MIME の種類を確認するだけでは、信頼性の高いセキュリティ チェックとは言えません。

    3. 指定した場所にファイルを保存します。HttpPostedFile オブジェクトの SaveAs メソッドを呼び出すことができます。または、HttpPostedFile オブジェクトの InputStream プロパティを使用してアップロードされたファイルをバイト配列またはストリームとして管理することもできます。

    アップロードされたファイルを操作する方法の例を次に示します。このコードではアップロードされたファイルの拡張子を、許可されているファイル名拡張子のハードコーディング リストと照らし合わせてチェックし、それ以外の種類のファイルをすべて拒否します。次にファイルは現在の Web サイトの UploadedImages フォルダに書き込まれます。アップロードされたファイルは、クライアント コンピュータに存在していたときと同じ名前で保存されます。HttpPostedFile オブジェクトの FileName プロパティはファイルのクライアント コンピュータでの絶対パスを返すため、FileUpload コントロールの FileName プロパティが使用されます。

    ms227669.alert_security(ja-jp,VS.90).gifセキュリティに関するメモ :

    保存されたファイルのパスと名前をユーザーに表示しないようにしてください。その情報が悪意のあるユーザーによって悪用される可能性があります。

    Protected Sub Page_Load(ByVal sender As Object, 
            ByVal e As System.EventArgs) Handles Me.Load
        If IsPostBack Then
            Dim path As String = Server.MapPath("~/UploadedImages/")
            Dim fileOK As Boolean = False
            If FileUpload1.HasFile Then
                Dim fileExtension As String
                fileExtension = System.IO.Path. _
                    GetExtension(FileUpload1.FileName).ToLower()
                Dim allowedExtensions As String() = _
                    {".jpg", ".jpeg", ".png", ".gif"}
                For i As Integer = 0 To allowedExtensions.Length - 1
                    If fileExtension = allowedExtensions(i) Then
                       fileOK = True
                    End If
                Next
                If fileOK Then
                    Try
                        FileUpload1.PostedFile.SaveAs(path & _
                             FileUpload1.FileName)
                        Label1.Text = "File uploaded!"
                    Catch ex As Exception
                        Label1.Text = "File could not be uploaded."
                    End Try
                Else
                    Label1.Text = "Cannot accept files of this type."
                End If
            End If
        End If
    End Sub
    
    protected void Page_Load(object sender, EventArgs e)
    {
        if(IsPostBack)
        {
            Boolean fileOK = false;
            String path = Server.MapPath("~/UploadedImages/");
            if (FileUpload1.HasFile) 
            {
                String fileExtension = 
                    System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
                String[] allowedExtensions = 
                    {".gif", ".png", ".jpeg", ".jpg"};
              for (int i = 0; i < allowedExtensions.Length; i++)
              {
                   if (fileExtension == allowedExtensions[i])
                   {
                        fileOK = true;
                   }
              }
            }
    
            if (fileOK)
            {
                try
                {
                    FileUpload1.PostedFile.SaveAs(path 
                        + FileUpload1.FileName);
                    Label1.Text = "File uploaded!";
                }
                catch (Exception ex)
                {
                    Label1.Text = "File could not be uploaded.";
                }
            }
            else
            {
                Label1.Text = "Cannot accept files of this type.";
            }
        }
    }
    

参照

概念

FileUpload Web サーバー コントロールの概要