ASP.NET - 檔案上傳



ASP.NET 有兩個控制元件允許使用者將檔案上傳到 Web 伺服器。伺服器收到已釋出的檔案資料後,應用程式可以儲存、檢查或忽略它。以下控制元件允許檔案上傳:

  • HtmlInputFile - 一個 HTML 伺服器控制元件

  • FileUpload - 一個 ASP.NET Web 控制元件

這兩個控制元件都允許檔案上傳,但 FileUpload 控制元件會自動設定表單的編碼,而 HtmlInputFile 不會。

在本教程中,我們使用 FileUpload 控制元件。FileUpload 控制元件允許使用者瀏覽並選擇要上傳的檔案,提供一個瀏覽按鈕和一個文字框用於輸入檔名。

一旦使用者透過鍵入名稱或瀏覽在文字框中輸入檔名,就可以呼叫 FileUpload 控制元件的 SaveAs 方法將檔案儲存到磁碟。

FileUpload 的基本語法是:

<asp:FileUpload ID= "Uploader" runat = "server" />

FileUpload 類派生自 WebControl 類,並繼承其所有成員。除此之外,FileUpload 類還具有以下只讀屬性:

屬性 描述
FileBytes 返回要上傳的檔案中的位元組陣列。
FileContent 返回指向要上傳檔案的流物件。
FileName 返回要上傳的檔名。
HasFile 指定控制元件是否有要上傳的檔案。
PostedFile 返回對上傳檔案的引用。

已釋出的檔案封裝在 HttpPostedFile 型別的物件中,可以透過 FileUpload 類的 PostedFile 屬性訪問它。

HttpPostedFile 類具有以下常用屬性:

屬性 描述
ContentLength 返回上傳檔案的大小(以位元組為單位)。
ContentType 返回上傳檔案的 MIME 型別。
FileName 返回完整的檔名。
InputStream 返回指向上傳檔案的流物件。

示例

以下示例演示了 FileUpload 控制元件及其屬性。該表單包含一個 FileUpload 控制元件以及一個儲存按鈕和一個標籤控制元件,用於顯示檔名、檔案型別和檔案長度。

在設計檢視中,表單如下所示:

File Upload

內容檔案程式碼如下所示:

<body>
   <form id="form1" runat="server">
   
      <div>
         <h3> File Upload:</h3>
         <br />
         <asp:FileUpload ID="FileUpload1" runat="server" />
         <br /><br />
         <asp:Button ID="btnsave" runat="server" onclick="btnsave_Click"  Text="Save" style="width:85px" />
         <br /><br />
         <asp:Label ID="lblmessage" runat="server" />
      </div>
      
   </form>
</body>

儲存按鈕背後的程式碼如下所示:

protected void btnsave_Click(object sender, EventArgs e)
{
   StringBuilder sb = new StringBuilder();
   
   if (FileUpload1.HasFile)
   {
      try
      {
         sb.AppendFormat(" Uploading file: {0}", FileUpload1.FileName);
         
         //saving the file
         FileUpload1.SaveAs("<c:\\SaveDirectory>" + FileUpload1.FileName);
      
         //Showing the file information
         sb.AppendFormat("<br/> Save As: {0}",  FileUpload1.PostedFile.FileName);
         sb.AppendFormat("<br/> File type: {0}",    FileUpload1.PostedFile.ContentType);
         sb.AppendFormat("<br/> File length: {0}",  FileUpload1.PostedFile.ContentLength);
         sb.AppendFormat("<br/> File name: {0}",  FileUpload1.PostedFile.FileName);
         
      }catch (Exception ex)
      {
         sb.Append("<br/> Error <br/>");
         sb.AppendFormat("Unable to save file <br/> {0}", ex.Message);
      }
   }
   else
   {
      lblmessage.Text = sb.ToString();
   }
}

注意以下幾點:

  • StringBuilder 類派生自 System.IO 名稱空間,因此需要包含它。

  • try 和 catch 塊用於捕獲錯誤並顯示錯誤訊息。

廣告
© . All rights reserved.