HOW TO:以 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 屬性,將上載檔案當做位元組陣列或資料流來管理。
下列範例顯示如何使用上載檔案。程式碼會對照硬式編碼的允許副檔名清單,檢查上載檔案的副檔名,並拒絕所有其他類型的檔案。然後,檔案會寫入至目前網站的 UploadedImages 資料夾中。上載檔案會以它在用戶端電腦上具有的相同檔案名稱來儲存。系統會使用 FileUpload 控制項的 FileName 屬性,這是因為 HttpPostedFile 物件的 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."; } } }