如果要用ASP來作一個FTP檔案上傳的頁面,我想很多人立刻就會想到要用第三方開發的組件,利用第三方的組件,雖然開發起來相對比較容易。但一般來說,免費下載的第三方的組件都有某些方面的功能限制,若要購買正版的第三方組件,對於國內的使用者,花銷也是一個不小的數字,就是能夠承擔的起,煩雜的手續也使很多人望而卻步。雖然微軟公司在本身的視窗系統裡面也提供了一個可以用來上傳檔案的組件--Posting Acceptor。但用過這個組件的朋友們都有一種普遍的感覺,就是實在不好用。
現在好了,自從微軟公司推出了.Net FrameWork以後,作為.Net FrameWork中重要組成部分的ASP.NET已經在內部建立了檔案上傳的功能,並且這種功能既是免費的,用起來又相當好用。下面我們就通過一個例子來介紹如何利用ASP.NET的這種功能完成檔案上傳。
一. 軟體編寫及的運行環境
微軟公司視窗2000專業版和.Net FrameWork SDK BETA2(微軟公司開發,用以.Net開發的軟體開發包測試2版本) 。 如果啟動並執行伺服器的硬碟分區是NTSF分區,就請把伺服器上的所有硬碟的存取屬性設定為Everyone , 這樣可確保上傳檔案可以正確寫入伺服器的硬碟中。
二. 軟體的準系統
本軟體主要完成上傳本地的檔案到伺服器的指定目錄的功能。就是在軟體的運行介面中,在使用者選擇完要上傳的檔案名稱,填入要上傳到伺服器的目錄名稱後,如果沒有填入上傳到伺服器目錄,則使用預設目錄" C:\ " ,如果填入的目錄在伺服器上不存在,就建立此目錄。在按" 開始上傳 "按鈕後,軟體就把選擇的檔案上傳到指定的目錄中,然後返回上傳檔案的資訊,即檔案的名稱,檔案的大小及檔案的類型。軟體具體的操作介面及運行結果介面如下圖所示:
圖1:軟體的操作介面
圖2:軟體的運行結果介面
三. 軟體設計中的重要步驟及具體解決辦法
(一).擇本地要上傳到伺服器的檔案
首先要感謝ASP.NET的強大功能,他提供的HTML控制元件,使得我們很容易的通過一個對話方塊來選擇要上傳的檔案。當然你的瀏覽器也必須是IE 3.02 或者Netscape 3.0版本或者比這二者版本高的瀏覽器。通過下列語句就可以完成選擇本地一個檔案的工作:
<input id = " loFile " type = " file " runat = " server " >
(二).為了成功完成檔案上傳工作,在Form中的編碼必須用" multipart/form-data " , 而不用From的預設編碼" application/x-www-form-urlencoded "。具體代碼如下:
<form method = " post " enctype =" multipart/form-data " runat = " server ">
</form >
(三).獲得上傳的檔案名稱及對磁碟的若干操作
為了獲得上傳的檔案名稱,必須要引入一個名稱空間( NameSapce ) --System.IO。此名稱空間裡面定義了許多關於檔案及磁碟操作的類,在本軟體中就是通過這些類的某些方法和屬性來完成軟體中的一些功能。
(1). 獲得上傳檔案的名稱
使用Path類中的GetFileName方法,具體如下:
lstrFileName = loFile.PostedFile.FileName
' 註: loFile.PostedFile.FileName 返回的是通過檔案對話方塊選擇的檔案名稱,
這之中包含了檔案的目錄資訊
lstrFileName = Path.GetFileName ( lstrFileName )
' 去掉目錄資訊,返迴文件名稱
(2). 判斷上傳目錄是否存在,不存在就建立
建立目錄要使用到Directory類中的 CreateDirectory 方法,判斷目錄是否存在要用到 Directory 類中的Exists方法。具體如下:
If ( not Directory.Exists( lstrFileFolder ) ) Then
Directory.CreateDirectory ( lstrFileFolder )
End If
' 註:lstrFileFolder是使用者填入的目錄名稱,或者是預設的目錄名稱
(四).上傳選定檔案到伺服器上
在前面工作都已經完成以後,就可以上傳檔案了,上傳檔案相對比較簡單,就用下面2行語句就可以完成上傳工作。
lstrFileNamePath = lstrFileFolder & lstrFileName
' 得到上傳目錄及檔案名稱
loFile.PostedFile.SaveAs ( lstrFileNamePath )
'上傳檔案到伺服器
(五).獲得並顯示上傳檔案的屬性
FileName.Text = lstrFileName
' 獲得檔案名稱
FileType.Text = loFile.PostedFile.ContentType
'獲得檔案類型
FileLength.Text = cStr ( loFile.PostedFile.ContentLength )
'獲得檔案長度
FileUploadForm.visible = false
AnswerMsg.visible = true
'顯示上傳檔案屬性
以上就是本軟體在編寫時的一些比較重要的地方。
四. 程式原始碼
<% @ Import Namespace=" System.IO " %><html ><BODY ><SCRIPT LANGUAGE = "VB" RUNAT = "SERVER" > Sub UploadFile_Clicked ( Sender as Object, e as EventArgs ) Dim lstrFileName as string Dim lstrFileNamePath as string Dim lstrFileFolder as string ' 如果上傳目錄為空白,就使用" c:\ "作為預設上傳目錄 ' 獲得上傳到伺服器的目錄名稱 if dir.value <> "" then lstrFileFolder = dir.value else lstrFileFolder = "c:\" end if ' 獲得檔案名稱 lstrFileName = loFile.PostedFile.FileName ' 註: loFile.PostedFile.FileName 返回的是 通過檔案對話方塊選擇的檔案名稱,這之中包含了檔案的目錄資訊 lstrFileName = Path.GetFileName ( lstrFileName ) ' 去掉目錄資訊,返迴文件名稱 ' 判斷上傳目錄是否存在,不存在就建立 If ( not Directory.Exists ( lstrFileFolder ) ) Then Directory.CreateDirectory ( lstrFileFolder ) End If '上傳檔案到伺服器 lstrFileNamePath = lstrFileFolder & lstrFileName ' 得到上傳目錄及檔案名稱 loFile.PostedFile.SaveAs ( lstrFileNamePath ) ' 獲得並顯示上傳檔案的屬性 FileName.Text = lstrFileName ' 獲得檔案名稱 FileType.Text = loFile.PostedFile.ContentType ' 獲得檔案類型 FileLength.Text = cStr ( loFile.PostedFile.ContentLength ) ' 獲得檔案長度 FileUploadForm.visible = false AnswerMsg.visible = true ' 顯示上傳檔案屬性 End sub </SCRIPT ><ASP:panel id = "FileUploadForm" visible = " true " runat = "server" > <form method = "post" enctype = "multipart/form-data" runat = "server" > <h1 > 歡迎使用ASP.NET頁面實現檔案上傳 </h1 > 請選擇上傳到伺服器的檔案名稱: <input id = "loFile" type = "file" runat = "server" > <br > 請輸入上傳到伺服器的目錄名稱: <input id = "dir" type = "text" runat = "server" > <br > <input type = "submit" value = "開始上傳" OnServerClick = " UploadFile_Clicked" runat = "server" > <br ></form ></ASP:panel ><ASP:panel id = "AnswerMsg" visible = " false " runat = "server" > 謝謝使用ASP.NET頁面實現檔案上傳 <br > 成功上傳 <ASP:label id = "FileName" runat = "server" /> <br > 檔案大小 <ASP:label id = "FileLength" runat = "server" /> 位元組 <br > 檔案類型 <ASP:label id = "FileType " runat = "server" /> <br > </ASP:panel ></BODY ></HTML >
五. 總結
至此我們就完成了一個比較完善的FTP檔案上傳軟體的全部工作,由此可見ASP.NET的功能還是比較強大的。通過本例子,我們也看到要想靈活運用ASP.NET,還要深入掌握微軟公司為.NET FRAMEWORK開發的軟體開發包(SDK BETA 2),只有掌握了.NET FRAMEWORK開發的軟體開發包,才可能用ASP.NET開發出功能更強大,生命力更大的軟體。
以上就是利用ASP.NET設計FTP檔案上傳的全部過程,希望對大家熟練掌握ASP.NET設計FTP檔案上傳有所協助。