方法 : FileUpload Web サーバー コントロールを使用してファイルをアップロードする
更新 : 2007 年 11 月
FileUpload Web サーバー コントロールを使用すると、ユーザーにそれぞれのコンピュータからサーバーにファイルを送信する方法を提供できます。アップロードされるファイルは、ポストバック中にブラウザ要求の一部としてサーバーに送信されます。ファイルのアップロードが完了すると、コードでファイルを管理できます。
メモ : |
---|
アップロードできる最大のファイル サイズは MaxRequestLength 構成設定の値によって異なります。ユーザーが最大サイズよりも大きいファイルをアップロードしようとすると、アップロードは失敗します。 |
FileUpload Web サーバー コントロールを使用してファイルをアップロードするには
FileUpload コントロールをページに追加します。
メモ : セキュリティ上の理由から、ファイル名を FileUpload コントロールにあらかじめロードすることはできません。
ページの Load イベントなどのイベントのハンドラでは、次の処理を行います。
FileUpload コントロールがアップロードされたファイルを持つことを、その HasFile プロパティをテストすることで確認します。
ファイルの名前または MIME の種類を確認し、受け入れるファイルをユーザーがアップロード済みであることを確認します。MIME の種類を確認するには、FileUpload コントロールの PostedFile プロパティとして公開されている HttpPostedFile オブジェクトを取得します。その後、ポストされたファイルの ContentType プロパティを確認することによって MIME の種類を取得できます。
セキュリティに関するメモ : アップロードされたファイルの MIME の種類は、場合によっては詐称できるため、ファイルの MIME の種類を確認するだけでは、信頼性の高いセキュリティ チェックとは言えません。
指定した場所にファイルを保存します。HttpPostedFile オブジェクトの SaveAs メソッドを呼び出すことができます。または、HttpPostedFile オブジェクトの InputStream プロパティを使用してアップロードされたファイルをバイト配列またはストリームとして管理することもできます。
アップロードされたファイルを操作する方法の例を次に示します。このコードではアップロードされたファイルの拡張子を、許可されているファイル名拡張子のハードコーディング リストと照らし合わせてチェックし、それ以外の種類のファイルをすべて拒否します。次にファイルは現在の Web サイトの UploadedImages フォルダに書き込まれます。アップロードされたファイルは、クライアント コンピュータに存在していたときと同じ名前で保存されます。HttpPostedFile オブジェクトの FileName プロパティはファイルのクライアント コンピュータでの絶対パスを返すため、FileUpload コントロールの FileName プロパティが使用されます。
セキュリティに関するメモ : 保存されたファイルのパスと名前をユーザーに表示しないようにしてください。その情報が悪意のあるユーザーによって悪用される可能性があります。
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."; } } }