OpenFileDialog is for windown forms application, I am not sure what you intended to do whether you want to upload file or do other thing.
Simply you can use file upload, If you want to dialog box to open, you can use either HTML input file type or <asp:FileUpload
ex:
<input type="file" id="fleUpload" runat="server" />
or
<asp:FileUpload ID="FileUpload1" runat="server" /></div>
------------------------------------------------------------------------------------------------------------------------------------------------------
應用程式中經常需要允許使用者把檔案上傳到web伺服器
。儘管在ASP.NET 1.X也可以完成該功能,但在ASP.NET 2.0中使用FileUpload控制項會更簡單。
該控制項讓使用者更容易地瀏覽和選擇用於上傳的檔案,它包含一個瀏覽按鈕和用於輸入檔案名稱的文字框。只要使用者在文字框中輸入了完整檔案名稱,無論是直接輸入或通過瀏覽按鈕選擇,都可以調用FileUpload的SaveAs方法儲存到磁碟上。
除了從WebControl類繼承的標準成員,FileUpload控制項還公開了幾個唯讀屬性,在表5-8和表5-9列出。
表5-8 FileUpload控制項屬性
名 稱 |
類型 |
讀 |
寫 |
說 明 |
FileContent |
Stream |
× |
|
返回一個指向上傳檔案的流對象 |
FileName |
string |
× |
|
返回要上傳檔案的名稱,不包含路徑資訊 |
HasFile |
Boolean |
× |
|
如果是true,則表示該控制項有檔案要上傳 |
PostedFile |
HttpPostedFile |
× |
|
返回已經上傳檔案的引用。表5-9列出了它所公開的唯讀屬性 |
表5-9 HttpPostedFile屬性
名 稱 |
類 型 |
讀 |
寫 |
說 明 |
ContentLength |
integer |
× |
|
返回上傳檔案的按位元組表示的檔案大小 |
ContentType |
string |
× |
|
返回上傳檔案的MIME內容類型 |
FileName |
string |
× |
|
返迴文件在用戶端的完全限定名 |
InputStream |
Stream |
× |
|
返回一個指向上傳檔案的流對象 |
所有這些屬性將在下面的樣本中說明。
為了查看FileUpload控制項在實際中的運用,建立一個FileUploadDemo網站。在頁面上添加一個FileUpload控制項,然後,添加
兩個ASP.NET按鈕,Text屬性分別設定為Save和Display,ID分別設定為btnSave和btnDisplay。增加兩個Label控
件,並分別將ID設定為lblMesage和lblDisplay。用<br/>HTML元素分隔這些控制項。切換到設計檢視,通過雙擊每個按鈕,為它們在
程式碼後置檔案中建立具有預設名稱的Click事件處理常式。完成後的內容檔案類似於樣本5-11。
樣本5-11:FileUploadDemo網站的default.aspx
<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”Default.aspx.cs” Inherits=”_Default” %> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.1//EN” “http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml” > <head runat=”server”> <title>FileUpload Control</title> </head><body> <form id=”form1” runat=”server”> <div> <h1>FileUpload Control</h1> <asp:FileUpload ID=”FileUpload1” runat=”server” /> <br /> <asp:Button ID=”btnSave” runat=”server” Text=”Save” OnClick=”btnSave_Click” /> <asp:Button ID=”btnDisplay” runat=”server” Text=”Display” OnClick=”btnDisplay_Click” /> <br /> <br /> <asp:Label ID=”lblMessage” runat=”server” /> <asp:Label ID=”lblDisplay” runat=”server” /> </div> </form> </body> </html> |
在程式碼後置檔案中,添加樣本5-12中高亮顯示的代碼,非高亮顯示的代碼由VS2005自動建立。
樣本5-12:FileUploadDemo網站的Default.aspx.cs
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.IO; // 使用Stream必需public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) {} protected void btnSave_Click(object sender, EventArgs e) { string str = “”; if (FileUpload1.HasFile) { try { str += “Uploading file: “ + FileUpload1.FileName; // 儲存檔案 FileUpload1.SaveAs(“c://websites//uploads//” + FileUpload1.FileName); // 顯示檔案資訊 str += “<br/>Saved As: “ + FileUpload1.PostedFile.FileName; str += “<br/>File Type: “ + FileUpload1.PostedFile.ContentType; str += “<br/>File Length (bytes): “ + FileUpload1.PostedFile.ContentLength; str += “<br/>PostedFile File Name: “ + FileUpload1.PostedFile.FileName; } catch (Exception ex) { str += “<br/><b>Error</b><br/>Unable to save c://websites//uploads//” + FileUpload1.FileName +“<br/>” + ex.Message; } } else { str = “No file uploaded.”; } lblMessage.Text = str; lblDisplay.Text = “”; } protected void btnDisplay_Click(object sender, EventArgs e) { string str = “<u>File: “ + FileUpload1.FileName + “</u><br/>”; if (FileUpload1.HasFile) { try { Stream stream = FileUpload1.FileContent; StreamReader reader = new StreamReader(stream); string strLine = “”; do { strLine = reader.ReadLine( ); str += strLine; } while (strLine != null); } catch (Exception ex) { str += “<br/><b>Error</b><br/>Unable to display “ + FileUpload1.FileName + “<br/>” + ex.Message; } } else { str = “No file uploaded.”; } lblDisplay.Text = str; lblMessage.Text = “”; } } |
高亮顯示的using聲明對於不使用完全限定命名空間,而使用Stream對象是必須的。
在Save按鈕的btnSave_Click事件處理常式中,FileUpload控制項的HasFile屬性用於檢測文字框中是否輸入了有效完全限定
檔案名稱。如果文字框為空白或輸入的名稱無效,將不會通過檢測,並且lblMessage將顯示“No file upladed”。
假
定上傳了一個有效檔案,那麼將執行try代碼塊中的代碼。關鍵語句是調用File-
Upload控制項的SaveAs方法。該方法使用寫入程式碼路徑和FileName屬性傳遞一個完整檔案名稱。該語句可能會由於各種原因而失敗,包括磁碟
空間不足、無效的路徑或安全問題(稍後會有更詳細的說明)。
如果SaveAs方法失敗,則執行catch代碼塊。在lblMessage中顯示一個錯誤資訊,包括該異常的Message屬性ex.Message。
如果SaveAs方法執行成功,關於上傳檔案的多個資訊將顯示在lblMessage中,這些資訊通過FileUpload.PostedFile(類型為HttpPostedFile)中的屬性擷取。
Display按鈕的Click事件處理常式與前面的類似,只不過它不是顯示檔案資訊,而是顯示檔案內容。它通過使用FileContent屬性擷取表
現為Stream對象的上傳檔案的內容,然後這個Stream對象被用於執行個體化一個StreamReader對象。StreamReader的Read-
Line方法逐行的遍曆檔案,然後把合并後的字串顯示在lblDisplay中。
當在討論從用戶端上傳檔案到web伺服器時,安全是非常讓人關注的。須注意兩點,首先,使用這種方式會公開web伺服器,從而會有非常大的安全性漏洞,為此要特別細心。因為這樣不僅可以上傳病毒,木馬和其他惡意軟體
,還會存在用戶端瀏覽web伺服器目
錄結構的危險。因此,應該使用寫入程式碼目標目錄,至少嚴格限定在哪裡儲存上傳的檔案。
另外,要注意的一點是,允許在磁碟寫檔案所必需的許可權。在開發web應用程式時,一般情況下,開發機器同時也是web伺服器,特別是使用VS2005默
認的開發模式。在該模式下使用的是內建的web伺服器,並且不通過IIS訪問網站而是由檔案系統訪問網站。這樣,永遠也不會有許可權問題。
然而,當網站部署到產品伺服器上,且該網站通過IIS和虛擬目錄來訪問時,就會出現問題。這是因為運行ASP.NET的賬戶必須擁有對用於儲存上傳檔案
的目錄的寫入權限。在Windows2000/XP中,賬戶的名稱是ASPNET。在Windows
Server2003中,寫入權限必須分配給IIS_WPG賬戶組。
利用FileUpload控制項並結合良好的安全防護,使用者可以把自己的檔案傳送到網站,以豐富網站功能。