3、對檔案及檔案夾的操作:
對檔案的操作包括"下載"和"刪除"兩種,在上面列表顯示指定檔案夾中內容時,針對檔案,有這樣的語句:
dr[2]="<a href="+url+" target=_blank"+">下載</a>";//建立聯結地址
其中,url是指定檔案對應的伺服器路徑。 通過這樣的連結將檔案定位到伺服器上的對應位置。視檔案格式的不同,用戶端可以下載檔案到本機上,也可以就在伺服器上開啟它。
刪除檔案很簡單,.Net的IO命名空間的File類庫有這樣的方法:
File.Delete(string filename);其中,filename為檔案的完整路徑
你需要注意的是,檔案的刪除將不需要驗證,要防止檔案被刪除,你需要依照下面的方式來進行。(當然,程式中為避免檔案誤刪除提供了確認驗證,檔案夾刪除也一樣。)
對檔案夾的操作分為:進入或者刪除。如果檔案夾在建立時被設定"進入受限"或者"刪除受限",使用者在執行這樣的操作時將被要求密碼驗證,只有通過驗證才能完成相應的操作,這種方式保護了你的檔案被非法訪問或刪除。
相對檔案的刪除,檔案夾的刪除程式要稍微複雜些,.Net的Directory類庫提供的方法Delete()只能刪除空檔案夾,這就需要我們首先清空檔案夾中內容,然後才能完成這一操作,由於檔案夾中還可能再包含有檔案夾,我們通過遞迴調用來實現這一操作:
//刪除檔案夾的方法
public void DeleteFolder(string dir)
{
foreach(string d in Directory.GetFileSystemEntries(dir))
{
if(File.Exists(d))
File.Delete(d);//直接刪除其中的檔案
else
DeleteFolder(d);//遞迴刪除子檔案夾
}
Directory.Delete(dir);//刪除已空檔案夾
}
其中,參數dir是待刪除檔案夾的完整路徑。程式使用迴圈語句,尋找檔案夾中的內容,是檔案則直接刪除,如果是檔案夾,則遞迴調用方法自身來刪除子檔案夾,檔案夾清空後再完成刪除操作。
4、檔案上傳:
要實現網路硬碟的功能,必須要有可供操作的檔案,這些檔案來自於用戶端的上傳(當然,伺服器端也能提供這些檔案,但這不是網路硬碟的重點),過去我們實現檔案的上傳,在Asp中通常是使用第一些檔案上傳組件,比如Microsoft 的PostingAcceptor組件,另外還有第三方提供的一些付費組件(不過說真的,這些組件並不好用)。那時候想要自己開發這樣的檔案上傳組件,相當繁瑣;而現在,.Net提供的類庫HttpPostedFile和HttpFilesCollection可以很容易地訪問上傳到伺服器的檔案,同時使開發人員控制檔案上傳過程。其中的HttpPostedFile類封裝已經上傳到伺服器的檔案對象,其方法和屬性提供對每個檔案的內容和屬性的訪問;HttpFileCollection類則為多個HttpPostedFile對象提供一個容器,用作儲存上傳給伺服器的資料結構的類,這樣你就可以利用被傳送的檔案集合,該檔案集合可通過其Files屬性從HttpRequest 對象訪問,一旦伺服器接收了請求的整個內容,該集合就可以訪問。這些內建的組件使得Asp.net中實現檔案上傳相當容易,甚至只需要幾行代碼就可以了。關於Asp.net中實現檔案上傳的文章很多,這裡不做專門的闡述,需要的話你可以參考那些文章,這裡,只提示你需要注意以下幾點:
1)、用戶端表單的編碼類別型Enctype 設定為multipart/form-data的MIME格式,提交表單使用Http的post方法,象下面這樣:
<form id="form1" method="post" enctype="multipart/form-data/form-data"
runat="server" >
2)、HttpInputFile控制項運行在伺服器端,設定runat=server,type=file ,象下面這樣:
<INPUT id="fileUp" type="file" size="6" runat="server">
3)、要上傳多個檔案,你可以布置多個HttpInputFile控制項,然後使用HttpRequest.Files來擷取這些檔案。
5、環境設定檔Web.config的處理:
在中文狀態下,你可能需要將全球化設定編碼由預設的"Utf-8"改為"gb2312",語句如下:
<globalization
requestEncoding="gb2312"
responseEncoding="gb2312"
/>
同時,Web.config預設設定的的檔案大小限制可能並不能滿足你的需要,你或許需要將限制尺度放大一些。這通過修改參數maxRequestLength的值來實現,如下所示:
<!-- 設定可接受的最大位元組數 -->
<httpRuntime maxRequestLength="500000">
</httpRuntime>
6、隨時跟蹤"當前路徑"值:
程式中的另一個關鍵點是關於"當前路徑"的,由於你總是需要在不同的檔案夾之間跳轉:點擊"進入"到達下一級檔案夾,點擊"上一級檔案夾"返回前一級檔案夾;而所有這些檔案夾的內容都通過同一個頁面(Default.aspx)來顯示,這個顯示頁面被設定為始終顯示當前檔案夾下內容。在你傳送查詢字串來調用它時,你需要在查詢字串中包含當前路徑的完整表示,這在程式中通過設定一個靜態變數來實現:public static string currFullPath=""; 當前路徑發生改變時,總是將這個路徑值傳送給這個靜態標量:currFullPath=Request["path"];這就使得這個靜態變數始終儲存著當前的路徑值,以這個靜態變數為查詢字串調用顯示頁: Response.Redirect("Default.aspx?path="+currFullPath)就總能顯示當前檔案夾下的內容了。
參考資料:
《Asp.net程式員參考手冊》、《XML進階編程》、《C#進階編程》、微軟MSDN
運行環境:
程式在:Windows XP中文正式版、.Net Frameworks 正式版、Visual Studio.Net中文正式版下調試通過,在區域網路(總部+多個異地子公司模式)上穩定運行