ASP.NET 2.0之HtmlInputFile控件使用小結

在本文中,我將簡要地總結ASP.NET 2.0中HtmlInputFile控件的使用要點,並給出一個典型的ASPX頁面示例。
    HtmlInputFile是把文件從一個瀏覽器上傳到Web服務器的HTML工具。①爲了充分利用HtmlInputFile控件,首先應確保服務器窗體的Enctype屬性設置爲multipart/form-data。
    注意:在ASP.NET 2.0中,在生成該控件的標記以前系統會自動地設置合適的Enctype屬性。
    其實,生成HTML的方法與具體的瀏覽器有關,可是它一般是由一個文本框和一個瀏覽按鈕組成的。用戶從本地機器上選擇一個文件,而後單擊該按鈕把頁面提交給服務器。這時,瀏覽器把所選的文件上傳到服務器,以下圖所示。  
    注意 在ASP.NET以前,須要在後臺運行一個服務器端進程,即Posting Acceptor,以處理multipart/form-data提交。ASP.NET再也不須要Posting Acceptor,由於它是經過ASP.NET運行庫實現的。
    ②在服務器上,文件放在一個HttpPostedFile類型的對象中,而且在此一直放到被處理爲止(例如,保存到磁盤或數據庫)。HttpPostedFile對象提供了一些屬性和方法,用來得到各文件的相關信息,以及讀取和保存該文件。如下代碼說明了如何把一個投遞的文件保存到磁盤上的一個特定文件夾中:
   
   
            
   
   
<% @ Page language="C#" %> <% @ Import Namespace="System.IO" %> < script runat ="server" > void UploadButton_Click(object sender, EventArgs e) { // 指定在服務器端要保存上傳文件的路徑。 // *** 假定路徑存在*** string savePath = UploadPath.Text; if (!Directory.Exists(savePath)) { Response.Write(String.Format("<h1>上傳文件路徑不存在:{0}</h1>", savePath)); Response.End(); } // 在試圖操做文件前, // 先驗證FileUpload 控件包含一個文件 if (FileUpload1.HasFile) { // 取得要上傳的文件名 string fileName = FileUpload1.FileName; // 把文件名添加到上傳路徑 savePath += fileName; // 調用SaveAs 方法來把上傳文件保存到指定路徑下。 // 注意,本示例並無實現全部必要錯誤檢查操做。 // 若是同名字的文件已經存在,則上傳文件將覆蓋之。 FileUpload1.SaveAs(savePath); // 通知用戶文件名保存的位置 UploadStatusLabel.Text = "文件被保存爲: <i>" + savePath + "</i>"; } else { // 通知用戶沒有上傳一個文件. UploadStatusLabel.Text = "你沒有指定要上傳的文件。"; } } </ script > < html > < head runat ="server" > < title > ASP.NET 2.0之HtmlInputFile控件使用小結 </ title > </ head > < body > < form runat ="server" > < h4 style ="text-align: center" > < span style ="font-size: 24pt; color: #000099" > 請選擇要上傳的文件: </ span ></ h4 > < b ></ b >< strong > 上傳文件保存路徑 </ strong >< br /> < asp:textbox id ="UploadPath" runat ="server" text ="c:\temp\" /> < hr /> < b > 要上傳的文件 </ b >< br /> < asp:fileupload id ="FileUpload1" runat ="server" /> < br >< br > < asp:button id ="UploadButton" text ="開始上傳文件" onclick ="UploadButton_Click" runat ="server" > </ asp:button > < hr /> < asp:label id ="UploadStatusLabel" runat ="server" > </ asp:label > </ form > </ body > </ html >
    ③咱們還可使用HttpPostedFile對象的InputStream屬性在持久性或處理以前讀取投遞的數據。HtmlInputFile控件還容許咱們限制上傳到服務器的文件類型。爲此,你只須要使用一個以逗號分離的MINE類型列表設置Accept屬性便可。
    ④注意,在使用SaveAs方法時,必定要指定到達輸出文件的完整路徑。若是你提供的是一個相對路徑,則ASP.NET試圖把文件放入系統目錄下。這種作法會致使「Access denied」錯誤。此外,必定要爲ASP.NET使用的賬號提供咱們想用來存儲文件的目錄的寫入權限。
    ⑤此外,ASP.NET對上傳的數據量實施一些控制。你能夠經過配置文件web.config中的<httpRuntime>節中的 MaxRequestLength屬性設置最大容許的文件大小。若是文件超過規定的大小(默認爲4MB),瀏覽器中就會產生一個錯誤。而當上傳大型文件時,因爲系統內存過分消耗,也會產生另外一種運行時錯誤;所以,這時要採起特別措施。
    最後,本文所附示例頁面在Windows XP+.net 2.0+Visual Web Developer 2005 Express Edition環境下調試經過。
相關文章
相關標籤/搜索