|
資源共享時(shí)應(yīng)該考慮安全性。這里,你可以設(shè)置用戶對該文件夾的訪問權(quán)限,通過設(shè)置密碼,你可以指定是否允許用戶進(jìn)入該文件夾,是否允許刪除該文件夾,或者兩者都禁止。這樣,你可以保護(hù)自己的文件,將它們獨(dú)占訪問或者限制在一個(gè)特定的范圍內(nèi)(這個(gè)范圍的成員應(yīng)該知道你的密碼),這樣,產(chǎn)品研發(fā)部門可以共用一個(gè)文件夾,財(cái)務(wù)部門也通過同樣的方式共用另一個(gè)文件夾,不屬于這個(gè)部門的人員將限制訪問。當(dāng)然,這樣的限制你也可以應(yīng)用到單個(gè)文件上(這樣的應(yīng)用似乎不多,程序未實(shí)現(xiàn))。
此外,為了管理這些文件夾,你需要保留它們的設(shè)置信息:文件夾名、位置、受限操作類型、密碼及創(chuàng)建人等。程序中將這些信息寫入一Xml文件(此為folder.xml文件),隨后對文件夾的各種管理操作均通過讀寫該xml文件來進(jìn)行,以下方法就實(shí)現(xiàn)了新建文件夾時(shí)設(shè)置信息的存儲(chǔ):
public void CreateXmlOrAddFrag(string xmlFullPath,string
folderFullPath,string owner,string password,int type){
XmlDocument xmlDoc=new XmlDocument();
string xml="";
string xmlNode="";
xmlNode+="";
xmlNode+=folderFullPath;
xmlNode+="";
xmlNode+="";
xmlNode+=owner;
xmlNode+="";
xmlNode+="";
xmlNode+=password;
xmlNode+="";
xmlNode+="";
xmlNode+=type;
xmlNode+="";
xmlNode+="";
if(!File.Exists(xmlFullPath)){//不存在則創(chuàng)建xml存儲(chǔ)文件
xml="";
xml+="";
xml+=xmlNode;
xml+="";
xmlDoc.LoadXml(xml);
xmlDoc.Save(xmlFullPath);//存儲(chǔ)文件
}
else{//存在xml存儲(chǔ)文件則添加新的文檔片段
xmlDoc.Load(xmlFullPath);
XmlDocumentFragment
docFrag=xmlDoc.CreateDocumentFragment();//文檔片元素節(jié)點(diǎn)
docFrag.InnerXml=xmlNode;
XmlNode currNode=xmlDoc.DocumentElement;//獲取文檔根節(jié)淀
currNode.InsertBefore(docFrag,currNode.FirstChild);//插入文檔段
xmlDoc.Save(xmlFullPath);//存儲(chǔ)改變
}
}
其中,參數(shù)fileFullPath是存儲(chǔ)文件夾信息的xml文件路徑,folderFullPath是此新文件夾路徑,owner是創(chuàng)建人名,password是密碼,type表示限制操作的類型("0"表示進(jìn)入受限,"1"表示刪除受限)。在程序運(yùn)行之初,存儲(chǔ)文件夾信息的folder.xml文件可能尚不存在,所以程序中首先判斷這個(gè)文件是否存在,不存在則動(dòng)態(tài)創(chuàng)建這個(gè)文件,這之后新建文件夾時(shí),將只需要添加文檔片段。這里,對Xml文件的讀寫通過DOM(文檔對象模型)來實(shí)現(xiàn),由于此處Xml文件不會(huì)太大,這種方式不會(huì)對內(nèi)存資源要求太高,速度也會(huì)很快!
3、對文件及文件夾的操作:
對文件的操作包括"下載"和"刪除"兩種,在上面列表顯示指定文件夾中內(nèi)容時(shí),針對文件,有這樣的語句:
dr[2]="下載";//建立聯(lián)接地址
其中,url是指定文件對應(yīng)的服務(wù)器路徑。 通過這樣的鏈接將文件定位到服務(wù)器上的對應(yīng)位置。視文件格式的不同,客戶端可以下載文件到本機(jī)上,也可以就在服務(wù)器上打開它。
刪除文件很簡單,.Net的IO命名空間的File類庫有這樣的方法:
File.Delete(string filename);其中,filename為文件的完整路徑
你需要注意的是,文件的刪除將不需要驗(yàn)證,要防止文件被刪除,你需要依照下面的方式來進(jìn)行。(當(dāng)然,程序中為避免文件誤刪除提供了確認(rèn)驗(yàn)證,文件夾刪除也一樣。
對文件夾的操作分為:進(jìn)入或者刪除。如果文件夾在創(chuàng)建時(shí)被設(shè)置"進(jìn)入受限"或者"刪除受限",用戶在執(zhí)行這樣的操作時(shí)將被要求密碼驗(yàn)證,只有通過驗(yàn)證才能完成相應(yīng)的操作,這種方式保護(hù)了你的文件被非法訪問或刪除。
相對文件的刪除,文件夾的刪除程序要稍微復(fù)雜些,.Net的Directory類庫提供的方法Delete()只能刪除空文件夾,這就需要我們首先清空文件夾中內(nèi)容,然后才能完成這一操作,由于文件夾中還可能再包含有文件夾,我們通過遞歸調(diào)用來實(shí)現(xiàn)這一操作:
//刪除文件夾的方法
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);//刪除已空文件夾
}
其中,參數(shù)dir是待刪除文件夾的完整路徑。程序使用循環(huán)語句,查找文件夾中的內(nèi)容,是文件則直接刪除,如果是文件夾,則遞歸調(diào)用方法自身來刪除子文件夾,文件夾清空后再完成刪除操作。
4、文件上傳:
要實(shí)現(xiàn)網(wǎng)絡(luò)硬盤的功能,必須要有可供操作的文件,這些文件來自于客戶端的上傳(當(dāng)然,服務(wù)器端也能提供這些文件,但這不是網(wǎng)絡(luò)硬盤的重點(diǎn)),過去我們實(shí)現(xiàn)文件的上傳,在Asp中通常是使用第一些文件上傳組件,比如Microsoft 的PostingAcceptor組件,另外還有第三方提供的一些付費(fèi)組件(不過說真的,這些組件并不好用)。那時(shí)候想要自己開發(fā)這樣的文件上傳組件,相當(dāng)繁瑣;而現(xiàn)在,.Net提供的類庫HttpPostedFile和HttpFilesCollection可以很容易地訪問上載到服務(wù)器的文件,同時(shí)使開發(fā)人員控制文件上載過程。其中的HttpPostedFile類封裝已經(jīng)上傳到服務(wù)器的文件對象,其方法和屬性提供對每個(gè)文件的內(nèi)容和屬性的訪問;HttpFileCollection類則為多個(gè)HttpPostedFile對象提供一個(gè)容器,用作保存上傳給服務(wù)器的數(shù)據(jù)結(jié)構(gòu)的類,這樣你就可以利用被傳送的文件集合,該文件集合可通過其Files屬性從HttpRequest 對象訪問,一旦服務(wù)器接收了請求的整個(gè)內(nèi)容,該集合就可以訪問。這些內(nèi)置的組件使得Asp.net中實(shí)現(xiàn)文件上傳相當(dāng)容易,甚至只需要幾行代碼就可以了!關(guān)于Asp.net中實(shí)現(xiàn)文件上傳的文章很多,這里不做專門的闡述,需要的話你可以參考那些文章,這里,只提示你需要注意以下幾點(diǎn):
1)、客戶端表單的編碼類型Enctype 設(shè)置為multipart/form-data的MIME格式,提交表單使用Http的post方法,象下面這樣:
|
|
【收藏】【打印】【進(jìn)入論壇】 |
|
|
|
|
|
|
|