[ASP.NET] FileUpload Web サーバー コントロールを使用してファイルをアップロードする

Webアプリケーションでファイルを取得するプログラムの備忘録です。

  1. FileUpload コントロールをページに追加します。
     セキュリティ上の理由から、ファイル名を FileUpload コントロールにあらかじめロードすることはできません。
  2. ページの Load イベントなどのイベントのハンドラでは、次の処理を行います。
    1. FileUpload コントロールがアップロードされたファイルを持つことを、その HasFile プロパティをテストすることで確認します。
    2. ファイルの名前または MIME の種類を確認し、受け入れるファイルをユーザーがアップロード済みであることを確認します。
        MIME の種類を確認するには、FileUpload コントロールの PostedFile プロパティとして公開されている HttpPostedFile オブジェクトを取得します。
        その後、ポストされたファイルの ContentType プロパティを確認することによって MIME の種類を取得できます。
    3. 指定した場所にファイルを保存します。
        HttpPostedFile オブジェクトの SaveAs メソッドを呼び出すことができます。
        または、HttpPostedFile オブジェクトの InputStream プロパティを使用してアップロードされたファイルをバイト配列またはストリームとして管理することもできます。

例)このコードではアップロードされたファイルの拡張子を、指定した拡張子リストと照らし合わせ、OKであれば保存処理へ進みます。
  保存は現在の Web サイトのUploadedImagesフォルダを指定しています。
  アップロードされたファイルは、クライアントコンピュータに存在していたときと同じ名前で保存されます。変更も可能です。
  HttpPostedFile オブジェクトのFileNameプロパティはファイルのクライアント コンピュータでの絶対パスを返すため、FileUpload コントロールのFileNameプロパティを使用します。

  また、クライアントから送信できるファイルの大きさは、既定サイズで4,096KB(4MB)です。
  この値は、MaxRequestLength値を変更することで変えられます。
    configSection.MaxRequestLength = 2048

  但し、MaxRequestLengthを超えたファイルを送った場合、ブラウザが真っ白になるかHTTPエラーになったはずです。。。
  なので、エラーや真っ白にしたくない場合、2Mまでとしたい場合は、余分に5M程度を設定しておき、一旦受け取った後PostedFile.ContentLengthでファイルサイズを確認し、
  2M以内なら保存、2Mを超えるようならエラーメッセージを出すなどのユーザインターフェースにした方が良いです。
  
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