共用方式為


HOW TO:以 FileUpload Web 伺服器控制項上載檔案

更新:2007 年 11 月

FileUpload Web 伺服器控制項允許您提供使用者一種方法,讓他們可將檔案從其電腦傳送至伺服器。要上載的檔案會送交至伺服器做為回傳期間瀏覽器要求的一部分。在檔案完成了上載之後,您可以利用程式碼管理檔案。

注意事項:

可以上載檔案大小的最大值取決於 MaxRequestLength 組態設定值。如果使用者嘗試上載的檔案超過最大大小,上載將會失敗。

若要以 FileUpload Web 伺服器控制項上載檔案

  1. FileUpload 控制項加入至頁面。

    注意事項:

    基於安全性考量,您無法將檔案名稱預先載入至 FileUpload 控制項。

  2. 在事件 (如頁面的 Load 事件) 的處理常式中,執行下列動作:

    1. 請測試 FileUpload 控制項的 HasFile 屬性,檢查這個控制項是否具有上載的檔案。

    2. 檢查檔案的檔案名稱或 MIME 類型,以確定使用者已上載您想要接受的檔案。若要檢查 MIME 類型,請取得以 FileUpload 控制項的 PostedFile 屬性公開的 HttpPostedFile 物件。然後,您可以檢查已公佈檔案的 ContentType 屬性,來取得 MIME 類型。

      安全性注意事項:

      在某些情況下,可以欺騙上載檔案的 MIME 類型,所以只檢查檔案的 MIME 類型不是可靠的安全性檢查。

    3. 將檔案儲存至您指定的位置。您可以呼叫 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.";
            }
        }
    }
    

請參閱

概念

FileUpload Web 伺服器控制項概觀