国产黄色免费网站,人人干人人干人人干,免费大黄网站在线看,国产情侣一区二区三区,99精品国产福利免费一区二区,国产亚洲成归v人片在线观看,伊人88

2023信創(chuàng)獨角獸企業(yè)100強(qiáng)
全世界各行各業(yè)聯(lián)合起來,internet一定要實現(xiàn)!

Asp.net+Xml開發(fā)網(wǎng)絡(luò)硬盤

2004-02-11 eNet&Ciweek

  資源共享時應(yīng)該考慮安全性。這里,你可以設(shè)置用戶對該文件夾的訪問權(quán)限,通過設(shè)置密碼,你可以指定是否允許用戶進(jìn)入該文件夾,是否允許刪除該文件夾,或者兩者都禁止。這樣,你可以保護(hù)自己的文件,將它們獨占訪問或者限制在一個特定的范圍內(nèi)(這個范圍的成員應(yīng)該知道你的密碼),這樣,產(chǎn)品研發(fā)部門可以共用一個文件夾,財務(wù)部門也通過同樣的方式共用另一個文件夾,不屬于這個部門的人員將限制訪問。當(dāng)然,這樣的限制你也可以應(yīng)用到單個文件上(這樣的應(yīng)用似乎不多,程序未實現(xiàn))。

  此外,為了管理這些文件夾,你需要保留它們的設(shè)置信息:文件夾名、位置、受限操作類型、密碼及創(chuàng)建人等。程序中將這些信息寫入一Xml文件(此為folder.xml文件),隨后對文件夾的各種管理操作均通過讀寫該xml文件來進(jìn)行,以下方法就實現(xiàn)了新建文件夾時設(shè)置信息的存儲:

  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存儲文件

   xml="";

   xml+="";

   xml+=xmlNode;

   xml+="
";

   xmlDoc.LoadXml(xml);

   xmlDoc.Save(xmlFullPath);//存儲文件

   }

   else{//存在xml存儲文件則添加新的文檔片段

   xmlDoc.Load(xmlFullPath);

   XmlDocumentFragment

  docFrag=xmlDoc.CreateDocumentFragment();//文檔片元素節(jié)點

   docFrag.InnerXml=xmlNode;

   XmlNode currNode=xmlDoc.DocumentElement;//獲取文檔根節(jié)淀

   currNode.InsertBefore(docFrag,currNode.FirstChild);//插入文檔段

   xmlDoc.Save(xmlFullPath);//存儲改變

   }

  }

  其中,參數(shù)fileFullPath是存儲文件夾信息的xml文件路徑,folderFullPath是此新文件夾路徑,owner是創(chuàng)建人名,password是密碼,type表示限制操作的類型("0"表示進(jìn)入受限,"1"表示刪除受限)。在程序運行之初,存儲文件夾信息的folder.xml文件可能尚不存在,所以程序中首先判斷這個文件是否存在,不存在則動態(tài)創(chuàng)建這個文件,這之后新建文件夾時,將只需要添加文檔片段。這里,對Xml文件的讀寫通過DOM(文檔對象模型)來實現(xiàn),由于此處Xml文件不會太大,這種方式不會對內(nèi)存資源要求太高,速度也會很快!

  3、對文件及文件夾的操作:   

  對文件的操作包括""和"刪除"兩種,在上面列表顯示指定文件夾中內(nèi)容時,針對文件,有這樣的語句:

  dr[2]="";//建立聯(lián)接地址 

  其中,url是指定文件對應(yīng)的服務(wù)器路徑。 通過這樣的鏈接將文件定位到服務(wù)器上的對應(yīng)位置。視文件格式的不同,客戶端可以文件到本機(jī)上,也可以就在服務(wù)器上打開它。

  刪除文件很簡單,.Net的IO命名空間的File類庫有這樣的方法:

  File.Delete(string filename);其中,filename為文件的完整路徑

  你需要注意的是,文件的刪除將不需要驗證,要防止文件被刪除,你需要依照下面的方式來進(jìn)行。(當(dāng)然,程序中為避免文件誤刪除提供了確認(rèn)驗證,文件夾刪除也一樣?。?  

  對文件夾的操作分為:進(jìn)入或者刪除。如果文件夾在創(chuàng)建時被設(shè)置"進(jìn)入受限"或者"刪除受限",用戶在執(zhí)行這樣的操作時將被要求密碼驗證,只有通過驗證才能完成相應(yīng)的操作,這種方式保護(hù)了你的文件被非法訪問或刪除。  

  相對文件的刪除,文件夾的刪除程序要稍微復(fù)雜些,.Net的Directory類庫提供的方法Delete()只能刪除空文件夾,這就需要我們首先清空文件夾中內(nèi)容,然后才能完成這一操作,由于文件夾中還可能再包含有文件夾,我們通過遞歸調(diào)用來實現(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、文件上傳:   

  要實現(xiàn)網(wǎng)絡(luò)硬盤的功能,必須要有可供操作的文件,這些文件來自于客戶端的上傳(當(dāng)然,服務(wù)器端也能提供這些文件,但這不是網(wǎng)絡(luò)硬盤的重點),過去我們實現(xiàn)文件的上傳,在Asp中通常是使用第一些文件上傳組件,比如Microsoft 的PostingAcceptor組件,另外還有第三方提供的一些付費組件(不過說真的,這些組件并不好用)。那時候想要自己開發(fā)這樣的文件上傳組件,相當(dāng)繁瑣;而現(xiàn)在,.Net提供的類庫HttpPostedFile和HttpFilesCollection可以很容易地訪問上載到服務(wù)器的文件,同時使開發(fā)人員控制文件上載過程。其中的HttpPostedFile類封裝已經(jīng)上傳到服務(wù)器的文件對象,其方法和屬性提供對每個文件的內(nèi)容和屬性的訪問;HttpFileCollection類則為多個HttpPostedFile對象提供一個容器,用作保存上傳給服務(wù)器的數(shù)據(jù)結(jié)構(gòu)的類,這樣你就可以利用被傳送的文件集合,該文件集合可通過其Files屬性從HttpRequest 對象訪問,一旦服務(wù)器接收了請求的整個內(nèi)容,該集合就可以訪問。這些內(nèi)置的組件使得Asp.net中實現(xiàn)文件上傳相當(dāng)容易,甚至只需要幾行代碼就可以了!關(guān)于Asp.net中實現(xiàn)文件上傳的文章很多,這里不做專門的闡述,需要的話你可以參考那些文章,這里,只提示你需要注意以下幾點:   

  1)、客戶端表單的編碼類型Enctype 設(shè)置為multipart/form-data的MIME格式,提交表單使用Http的post方法,象下面這樣:

  


  runat="server" >

  2)、HttpInputFile控件運行在服務(wù)器端,設(shè)置runat=server,type=file ,象下面這樣:   

  

  3)、要上傳多個文件,你可以布置多個HttpInputFile控件,然后使用HttpRequest.Files來獲取這些文件。

  5、環(huán)境配置文件Web.config的處理:

  在中文狀態(tài)下,你可能需要將全球化設(shè)置編碼由默認(rèn)的"Utf-8"改為"gb2312",語句如下:

  

   requestEncoding="gb2312"

   responseEncoding="gb2312"

   />

  同時,Web.config默認(rèn)設(shè)置的的文件大小限制可能并不能滿足你的需要,你或許需要將限制尺度放大一些。這通過修改參數(shù)maxRequestLength的值來實現(xiàn),如下所示:

  

  

  


  6、隨時跟蹤"當(dāng)前路徑"值:

  程序中的另一個關(guān)鍵點是關(guān)于"當(dāng)前路徑"的,由于你總是需要在不同的文件夾之間跳轉(zhuǎn):點擊"進(jìn)入"到達(dá)下一級文件夾,點擊"上一級文件夾"返回前一級文件夾;而所有這些文件夾的內(nèi)容都通過同一個頁面(Default.aspx)來顯示,這個顯示頁面被設(shè)置為始終顯示當(dāng)前文件夾下內(nèi)容。在你傳送查詢字符串來調(diào)用它時,你需要在查詢字符串中包含當(dāng)前路徑的完整表示,這在程序中通過設(shè)置一個靜態(tài)變量來實現(xiàn):public static string currFullPath=""; 當(dāng)前路徑發(fā)生改變時,總是將這個路徑值傳送給這個靜態(tài)標(biāo)量:currFullPath=Request["path"];這就使得這個靜態(tài)變量始終存儲著當(dāng)前的路徑值,以這個靜態(tài)變量為查詢字符串調(diào)用顯示頁: Response.Redirect("Default.aspx?path="+currFullPath)就總能顯示當(dāng)前文件夾下的內(nèi)容了!

  參考資料:

  《Asp.net程序員參考手冊》、《XML高級編程》、《C#高級編程》、微軟MSDN

  運行環(huán)境:

  程序在:Windows XP中文正式版、.Net Frameworks 正式版、Visual Studio.Net中文正式版下調(diào)試通過,在局域網(wǎng)(總部+多個異地子公司模式)上穩(wěn)定運行


相關(guān)頻道: eNews

您對本文或本站有任何意見,請在下方提交,謝謝!

投稿信箱:tougao@enet16.com