引言 在傳輸文件時常常采用FTP
Email以及
網上鄰居
三種方式
這幾種方式各有優缺點
FTP功能強大
但使用起來較為復雜
需要進行詳細設置滿足各種不同需求
當用戶數量不可預見時
設置會很繁瑣
Email使用方便
連入Internet就可進行文件傳輸
但安全性不高
對於比較重要的文件一般不采用此方式
網上鄰居
通過在本機上指定共享的Web文件夾並放置資源文件
用戶在一定范圍內可以訪問這些文件
但是范圍相當有限
通常在同一個DNS段地址內的用戶才能順利訪問
並且在許多列表計算機上層層展開搜索來獲取資源也比較費時
以上幾種方式主要是
點對點
進行傳輸
對於
點對多
的共享模式則需要尋求另外的傳輸途徑
網絡硬盤便是一種較好的解決方式
只要用戶具備足夠權限
就可進行各種操作
如同使用本地計算機一樣
它以HTTP方式傳輸
以WEB形式展現在所有用戶面前
通過浏覽器方式進行訪問
這樣
一塊空間
資源互見
的共享模式得以實現
網絡硬盤開發 ASP
NET是一種全新的服務器端技術
它采用CLR(Common Language Runtime)結構的程序設計平台
可在服務器端生成功能強大的WEB應用程序
同時也可保留用戶完整的應用狀態
提供最佳的控制方式[
]
XML是數據訪問領域的新技術
具有自描述性
內容與顯示相分離
可擴展性
獨立於平台等特點[
]
提供了一套跨平台
跨網絡
跨程序語言的數據描述方式
己逐漸成為科學與業務應用中數據表示及應用的數據交換標准格式[
]
將這兩種技術結合起來
可開發出功能強大的網絡硬盤系統
例如可以查看文件夾內容
創建新文件夾以及設置訪問權限
對文件及文件夾進行相關操作
上傳文件到指定文件夾
下載文件到本機或在線查看文件內容等等
下面分別用C#語言實現相應功能
查看文件夾內容
進入到指定的根文件夾
通過數據綁定控件Data Grid列表顯示該文件夾內容
包括類別
名稱
權限等
由於通過動態創建數據表Data Table讀取指定文件夾內容
並作為數據源與顯示控件Data Grid綁定
因此數據的顯示是動態的
創建動態表的函數如下
public Data Table Bind(string fullFolderPath)//創建數據表讀取文件夾內容
{
Data Table DT=new Data Table ();
Data Row dr;
//首先創建數據表結構
Dt
Columns
Add (new DataColumn (
type
System
Type
GetType (
System
String
)));//類型
Dt
Columns
Add (new Data Column (
name
System
Type
GetType (
System
String
)));//名稱
Dt
Columns
Add (new Data Column (
action
System
Type
GetType (
System
String
)));//操作
Dt
Columns
Add (new Data Column (
owner
System
Type
GetType (
System
String
)));//創建者
//為每一行填充數據
For each (string d in Directory
GetFileSystemEntries (fullFolderPath)){
dr=dt
NewRow();//新建行
String [] parts=d
Split (new char []{
\\
});
String txt=parts [parts
Length
];
dr[
]=txt;//名稱name
if(File
Exists(d))//如果是文件
{
dr[
]=
文件
;//類型type
Int pos=currFullPath
IndexOf (
Net Hard
);
String relaUrl=currFullPath
Substring (pos);
string url=
+relaUrl+
/
+txt;//
為服務器地址
dr[
]=
<a +url+
target=_blank
+
>下載</a>
;
}
Else if (Directory
Exists(d)){//如果是文件夾
dr[
]=
文件夾
;//type類型
string password=GetFolderPassword(d);//取得文件夾密碼信息
Int type=GetFolderLimitType (d);
If ((password! =
no
)&&(type! =
))
Dr [
]=
<a +d+
>密封</a>
;//操作action
Else
Dr [
]=
<a +d+
>進入</a>
;//操作action
dr[
]=GetFolderOwner(d);//取文件夾創建者名
}
Else
Response
Write(
<script>alert(
無對象可綁定!
)</script>
);
dt
Rows
Add(dr);//添加行
return dt;//返回數據表
}
}
此方法取出指定文件夾下的內容分別處理
如果是文件
則顯示
下載
鏈接指向服務器文件的Url地址
對於文件夾
若是
進入受限
則顯示
密封
導入到密碼驗證頁
否則顯示
進入
鏈接到初始頁
創建文件夾及設置訪問權限
在當前路徑下輸入新文件夾名稱來創建新文件夾
通過調用
NET的IO名字空間中的類庫Directory方法來實現該操作
Directory
CreateDirectory(string directory)
字符串directory表示新建文件夾的完整路徑
該方法默認向所有用戶開放新文件夾的完全讀寫訪問權限
對於網絡硬盤共享根文件夾可手動進行創建
並設置寫入權限
通過執行
internet信息服務
的
權限向導
來設置訪問權限
可以設置密碼來指定是否允許用戶進入該文件夾以及是否允許用戶刪除該文件夾
此外
為了管理這些文件夾
需要保留相關設置信息
如文件夾名
位置
受限操作類型
密碼及創建者等
將這些信息寫入XML文件
隨後通過讀寫該XML文件來實現對文件夾的相關操作
Public void CreateXmlOrAddFrag (string xmlFullPath
string folderFullPath
string owner
string password
int type){
XmlDocument xmlDoc=new XmlDocument();
string xml=
;
String xmlNode=
<character>
;
XmlNode+=
<full Path>
;
XmlNode+=folderFullPath;
XmlNode+=
</full Path>
;
XmlNode+=
<owner>
;
XmlNode+=owner;
XmlNode+=
</owner>
;
xmlNode+=
<password>
;
xmlNode+=password;
xmlNode+=
</password>
;
xmlNode+=
<type>
;
xmlNode+=type;
xmlNode+=
</type>
;
xmlNode+=
</character>
;
if(!File
Exists(xmlFullPath)){//若不存在則創建xml存儲文件
xml=
<?xml version=
encoding=
gb
?>
;
xml+=
<folder>
;
xml+=xmlNode;
xml+=
</folder>
;
xmlDoc
LoadXml(xml);
xmlDoc
Save(xmlFullPath);//存儲文件
}
else{//存在xml存儲文件則添加新的文檔片段
xmlDoc
Load(xmlFullPath);
XmlDocumentFragment docFrag=xmlDoc
CreateDocumentFragment();//文檔片元素節點
docFrag
InnerXml=xmlNode;
XmlNode currNode=xmlDoc
DocumentElement;//獲取文檔根節點
currNode
InsertBefore(docFrag
currNode
FirstChild);//插入文檔片段
xmlDoc
Save(xmlFullPath);//存儲改變內容
}
}
其中
參數fileFullPath是存儲文件夾信息的XML文件路徑
folderFullPath是此新文件夾路徑
owner是創建者名
password是密碼
type表示限制操作的類型(
表示進入受限
表示刪除受限)
程序首先判斷存儲文件夾信息的文件是否存在
不存在則動態創建文件
之後新建文件夾時
只需添加文檔片段即可
這裡
對XML文件的讀寫通過文檔對象模型DOM實現
由於此處XML文件不會很大
因此對內存資源要求不會太高
速度會很快
對文件及文件夾的操作
對文件的操作包括
下載
和
刪除
兩種
用下面的語句實現下載功能
dr[
]=
<a +url+
target=_blank
+
>下載</a>
;//建立聯接地址
其中
url是指定文件對應的服務器路徑
通過這樣的鏈接將文件定位到服務器上的對應位置
客戶端可以下載文件到本機上
也可在服務器上打開它
刪除文件則利用
NET的IO命名空間的File類庫中的方法實現
File
Delete(string filename)
其中
filename為文件的完整路徑
如果文件夾在創建時被設置為
進入受限
或者
刪除受限
用戶在執行這樣的操作時將被要求密碼驗證
只有通過驗證才能完成相應的操作
NET的Directory類庫提供的方法Delete()只能刪除空文件夾
因此需要先清空文件夾中的內容
然後才能完成此操作
由於文件夾中可能還包含有文件夾
這裡通過遞歸調用實現該操作
Public void Delete Folder (string dir)
{
For each (string d in Directory
GetFileSystemEntries (dir))
{
If (File
Exists (d))
File
Delete(d);//直接刪除其中的文件
Else
Delete Folder(d);//遞歸刪除子文件夾
}
Directory
Delete(dir);//刪除已空文件夾
}
其中
參數dir是待刪除文件夾的完整路徑
程序使用循環語句
查找文件夾中的內容
若是文件則直接刪除
若是文件夾
則遞歸調用方法自身來刪除子文件夾
文件夾清空後再完成刪除操作
文件上傳
NET提供的類庫HttpPostedFile和HttpFilesCollection可以訪問上傳到服務器的文件
並且可以控制文件上傳過程
HttpPostedFile類封裝已上傳到服務器的文件對象
其方法和屬性提供對每個文件內容和屬性的訪問
HttpFilesCollection類為多個HttpPostedFile對象提供一個容器
保存上傳給服務器的數據結構的類
利用被傳送的文件集合的Files屬性從HttpRequest對象加以訪問
)客戶端表單的編碼類型Enctype 設置為multipart/form
data的MIME格式
提交表單使用HTTP的post方法
<Form id=
form
method=
post
enctype=
multipart/form
data
From:http://tw.wingwit.com/Article/program/net/201311/13314.html