Webアプリケーションでファイルを取得するプログラムの備忘録です。
- FileUpload コントロールをページに追加します。
セキュリティ上の理由から、ファイル名を FileUpload コントロールにあらかじめロードすることはできません。 - ページの Load イベントなどのイベントのハンドラでは、次の処理を行います。
- FileUpload コントロールがアップロードされたファイルを持つことを、その HasFile プロパティをテストすることで確認します。
- ファイルの名前または MIME の種類を確認し、受け入れるファイルをユーザーがアップロード済みであることを確認します。
MIME の種類を確認するには、FileUpload コントロールの PostedFile プロパティとして公開されている HttpPostedFile オブジェクトを取得します。
その後、ポストされたファイルの ContentType プロパティを確認することによって MIME の種類を取得できます。 - 指定した場所にファイルを保存します。
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