FileUpload控件
?
FileUpload這個控件我在隨筆:
《在數據庫中 存儲圖片 以及 在界面中顯示圖片(存儲圖片路徑)- 這種方法相對與存儲二進制文件好》之中,已經做了介紹,那篇隨筆只是介紹上傳圖片,FIleUpload控件實質上是一個文件上傳控件。
?
下面文章是轉自:(URL:http://www.cnblogs.com/hide0511/archive/2006/09/24/513201.html):
?FileUpload?控件顯示一個文本框控件和一個瀏覽按鈕,使用戶可以選擇客戶端上的文件并將它上載到 Web 服務器。用戶通過在控件的文本框中輸入本地計算機上文件的完整路徑(例如,C:\MyFiles\TestFile.txt)來指定要上載的文件。用戶也可以通過單擊“瀏覽”按鈕,然后在“選擇文件”對話框中定位文件來選擇文件。??? 用戶選擇要上載的文件后,FileUpload?控件不會自動將該文件保存到服務器。您必須顯式提供一個控件或機制,使用戶能提交指定的文件。例如,可以提供一個按鈕,用戶單擊它即可上載文件。為保存指定文件所寫的代碼應調用?SaveAs?方法,該方法將文件內容保存到服務器上的指定路徑。通常,在引發回發到服務器的事件的事件處理方法中調用?SaveAs?方法。
??? 在文件上傳的過程中,文件數據作為頁面請求的一部分,上傳并緩存到服務器的內存中,然后再寫入服務器的物理硬盤中。
??? 有三個方面需要注意:
????1.確認是否包含文件
??? 在調用?SaveAs?方法將文件保存到服務器之前,使用?HasFile?屬性來驗證?FileUpload?控件確實包含文件。若?HasFile?返回?true,則調用?SaveAs?方法。如果它返回false,則向用戶顯示消息,指示控件不包含文件。不要通過檢查PostedFile?屬性來確定要上載的文件是否存在,因為默認情況下該屬性包含 0 字節。因此,即使FileUpload?控件為空,PostedFile?屬性仍返回一個非空值。
????2.文件上傳大小限制 默認情況下,上傳文件大小限制為 4096 KB (4 MB)。可以通過設置?httpRuntime 元素的?maxRequestLength?屬性來允許上載更大的文件。若要增加整個應用程序所允許的最大文件大小,請設置 Web.config 文件中的?maxRequestLength?屬性。若要增加指定頁所允許的最大文件大小,請設置 Web.config 中?location?元素內的maxRequestLength?屬性。
??? 上載較大文件時,用戶也可能接收到以下錯誤信息:
??? aspnet_wp.exe (PID: 1520) was recycled because memory consumption exceeded 460 MB (60 percent of available RAM).
??? 以上信息說明,上傳文件的大小不能超過服務器內存大小的60%。這里的60%是Web。config文件的默認配置,是<processModel>配置節中的?memoryLimit?屬性默認值。雖然可以修改,但是如果上傳文件越大,成功幾率越小,不建議使用。
????3.上傳文件夾的寫入權限
??? 應用程序可以通過兩種方式獲得寫訪問權限。您可以將要保存上載文件的目錄的寫訪問權限顯式授予運行應用程序所使用的帳戶。您也可以提高為 ASP.NET 應用程序授予的信任級別。若要使應用程序獲得執行目錄的寫訪問權限,必須將?AspNetHostingPermission?對象授予應用程序并將其信任級別設置為AspNetHostingPermissionLevel.Medium?值。提高信任級別可提高應用程序對服務器資源的訪問權限。請注意,該方法并不安全,因為如果懷有惡意的用戶控制了應用程序,他(她)也能以更高的信任級別運行應用程序。最好的做法就是在僅具有運行該應用程序所需的最低特權的用戶上下文中運行 ASP.NET 應用程序。
????
??? FileUpload控件的常用屬性:
| 屬性 | 數據類型 | 說明 |
| FileBytes | byte[] | 獲取上傳文件的字節數組 |
| FileContent | Stream | 獲取指定上傳文件的Stream對象 |
| FileName | String | 獲取上傳文件在客戶端的文件名稱 |
| HasFile | Bool | 獲取一個布爾值,用于表示FileUpload控件是否已經包含一個文件 |
| PostedFile | HttpPostedFile | 獲取一個與上傳文件相關的HttpPostedFile對象,使用該對象可以獲取上傳文件的相關屬性 |
??? 可以通過3種方法訪問上傳文件:
1.通過FileBytes屬性。該屬性將上傳文件數據置于字節數組中,遍歷該數組,則能夠以字節方式了解上傳文件的內容。
2.通過FileContent屬性。調用該屬性可以獲得一個指向上傳文件的Stream對象。可以使用該屬性讀取上傳文件數據,并使用FileBytes屬性顯示文件內容。
3.通過PostedFile屬性。調用該屬性可以獲得一個與上傳文件相關的HttpPostedFile對象,使用該對象可以獲得與上傳文件相關的信息。例如,調用HttpPostedFile對象的ContentLength,可以獲得上傳文件大小;調用HttpPostedFile對象的ContentType屬性,可以獲得上傳文件的類型;調用HttpPostedFile對象的FileName屬性,可以獲得上傳文件在客戶端的完整路徑(調用FileUpload控件的FileName屬性,僅能獲得文件名)。
?
?
示例:
前臺代碼:
1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 2 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 4 <html xmlns="http://www.w3.org/1999/xhtml"> 5 <head runat="server"> 6 <title>示例8-3</title> 7 <link id="InstanceStyle" href="StyleSheet.css" type="text/css" rel="stylesheet" /> 8 </head> 9 <body> 10 <form id="Form1" runat="server"> 11 <div> 12 <fieldset style="width: 290px"> 13 <legend class="mainTitle">FileUpload控件典型應用</legend> 14 <br /> 15 <asp:FileUpload ID="FileUpload1" runat="server" /> 16 <asp:Button ID="BtnUpload" runat="server" Text="上傳" OnClick="BtnUpload_Click" /> 17 <hr /> 18 <asp:Label ID="LabMessage1" runat="server" ForeColor="red" /><br /> 19 <asp:Label ID="LabMessage2" runat="server" /> 20 </fieldset> 21 </div> 22 </form> 23 </body> 24 </html>?
后臺代碼(模仿MSDN):
1 using System; 2 using System.Data; 3 using System.Configuration; 4 using System.Web; 5 using System.Web.Security; 6 using System.Web.UI; 7 using System.Web.UI.WebControls; 8 using System.Web.UI.WebControls.WebParts; 9 using System.Web.UI.HtmlControls; 10 11 public partial class _Default : System.Web.UI.Page 12 { 13 protected void Page_Load(object sender, EventArgs e) 14 { 15 } 16 protected void BtnUpload_Click(object sender, EventArgs e) 17 { 18 bool fileOK = false; 19 string path = Server.MapPath("~/Temp/"); 20 if (FileUpload1.HasFile) 21 { 22 String fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower(); 23 String[] allowedExtensions = { ".gif", ".png", ".bmp", ".jpg" }; 24 for (int i = 0; i < allowedExtensions.Length; i++) 25 { 26 if (fileExtension == allowedExtensions[i]) 27 { 28 fileOK = true; 29 } 30 } 31 } 32 if (fileOK) 33 { 34 try 35 { 36 FileUpload1.SaveAs(path + FileUpload1.FileName); 37 LabMessage1.Text = "文件上傳成功."; 38 LabMessage2.Text = "<b>原文件路徑:</b>" + FileUpload1.PostedFile.FileName + "<br />" + 39 "<b>文件大小:</b>" + FileUpload1.PostedFile.ContentLength + "字節<br />" + 40 "<b>文件類型:</b>" + FileUpload1.PostedFile.ContentType + "<br />"; 41 } 42 catch (Exception ex) 43 { 44 LabMessage1.Text = "文件上傳不成功."; 45 } 46 } 47 else 48 { 49 LabMessage1.Text = "只能夠上傳圖片文件."; 50 } 51 } 52 }?
通過對以上的示例進行分析,我們還可以用驗證控件來實現對文件類型的驗證:
正則表達式:
1 <ASP:RegularExpressionValidator 2 id="RegularExpressionValidator1" runat="server" 3 ErrorMessage="Only mp3, m3u or mpeg files are allowed!" 4 ValidationExpression="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*)) 5 +(.mp3|.MP3|.mpeg|.MPEG|.m3u|.M3U)$" 6 ControlToValidate="FileUpload1"> 7 </ASP:RegularExpressionValidator> 8 <br /> 9 <ASP:RequiredFieldValidator 10 id="RequiredFieldValidator1" runat="server" 11 ErrorMessage="This is a required field!" 12 ControlToValidate="FileUpload1"> 13 </ASP:RequiredFieldValidator>?
以上就是FileUpload控件的使用方法.
?
轉載于:https://www.cnblogs.com/KTblog/p/4272535.html
總結
以上是生活随笔為你收集整理的FileUpload控件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LDPC译码算法代码概述
- 下一篇: 方法的重载【转】