文件傳送常用的三種方式FTP、Email及“網上鄰居”都在一定程度上實現了文件數據的交流,但它們都主要面向“點對點”的傳送,無法實現“一塊空間,資源互見”的應用需求,這種基於“點對多”的共享模式需要尋求另外的傳輸途徑,網絡硬盤就是一種很好的解決方式。常用傳輸方式及其在特定環境下面臨的困難我們經常有這樣的應用需求:通過網絡交換公共數據文件以實現資源共享,同時保護私有數據不被非法訪問,並使用簡單、直觀的方式操作。
英國Ewedrive 提供1GB的免費存儲空間,比較好的是它不限制單個文件大小
我們常用的文件傳輸FTP、Email郵件、網上鄰居都能實現文件的傳送。其中,"FTP"功能最為強大,但使用起來卻稍顯復雜,一大堆設置足以讓許多人望而止步,尤其用戶數量不可預見時,針對特殊需求用戶的設置將更加繁瑣;"Email"是大家所熟悉的了,但它的傳送不僅需要你連入 Internet,而且它的安全性也是個問題,在企業內部,財務、勞資等文件資料需通過這種方式交流不是好辦法;"網上鄰居"是又一種傳送文件的方法,通過在本機上指定共享的Web文件夾並放置資源文件,一定范圍內的用戶可以訪問到這些文件,然而這種方式使用的范圍相當有限,通常在同一個DNS段地址內的用戶才能順利訪問,其它尤其是Internet上的用戶,很難使用,此外同Email類似,它的使用也不直觀,很多時候你不得不在許多列表計算機上一層層展開搜索才有可能獲取你想要的資源!由此看來,以上三種方式雖然在一定程度上實現了文件數據的交流,但它們都主要面向"點對點"的傳送(你只能被動地等對方放置數據而不能主動"可視化"地索取),無法實現"一塊空間,資源互見"的應用需求,這種基於"點對多"的共享方式需要尋求另外的傳輸途徑,網絡硬盤就是一種很好的解決方式。
onedump
OneDump 存儲空間還是無限制大小的,不過單個文件只有最大5MB,且同時傳出10個文件,可用於存儲一些文檔之類的東西。
網絡硬盤的優勢網絡硬盤(也稱共享空間),是服務器上的一塊硬盤空間,在這裡,如果你具備足夠的權限,你可以對它隨意操作,就象使用你的本地計算機一樣。要知道,這一切以Http的方式傳輸,以Web的形式展現在所有用戶面前,通過浏覽器這種熟悉的方式訪問,這樣,"一塊空間,資源互見"的共享模式得以實現!此外,網絡硬盤界面在客戶端運行,它允許用戶提交數據到服務器,然後在指定的范圍內管理這些信息,這種處理模式大量使用在實際開發中,尤其是在構建交互式網絡文檔管理系統方面:網上考試系統、文件傳輸系統、新聞發布系統以及公司競標系統等方面都有大量應用! 以下使用ASP.Net(Visual C#語言實現)和XML(可擴展標記語言)開發了這樣的網絡硬盤系統。關於程序的開發細節及代碼中使用的關鍵技術和難點,都有詳細的講解,參照這些說明,你完全可以開發出自己的網絡硬盤。
網絡硬盤實現的功能
我們的網絡硬盤實現了以下功能:
1、查看文件夾內容
2、創建新文件夾同時可設置訪問權限
3、文件夾間的跳轉:進入下一級,返回上一級
4、上傳文件到指定文件夾
5、下載文件到本機或在線查看文件內容
6、刪除文件或文件夾
開發細節及技術關鍵點
1、查看文件夾內容:程序一開始將進入指定的根文件夾(如\NetHard),這個文件夾下的內容將通過數據綁定控件(DataGrid)來列表顯示,包括以下方面:類別(區別文件夾或文件)、名稱、權限(是否允許進入文件夾?是否可以下載文件?)、刪除(是否允許刪除文件或文件夾?)以及針對文件夾的創建者。這裡,由於文件夾中內容動態變化(你不知道什麼時候就有用戶傳送了文件或新建了文件夾或刪除了它們),我們通過動態創建數據表DataTable來讀取指定文件夾下的內容, 然後作為數據源與顯示控件DataGrid綁定,這樣,數據的顯示就總是適時的。創建動態表的函數如下: public DataTable Bind(string fullFolderPath)//創建數據表讀取文件夾內容
{
//以下是動態創建數據表的方法
DataTable dt=new DataTable();
DataRow dr;
//首先創建數據表結構
dt.Columns.Add(new DataColumn("type",System.Type.GetType("System.String"))); //類型
dt.Columns.Add(new DataColumn("name",System.Type.GetType("System.String"))); //名稱
dt.Columns.Add(new DataColumn("action",System.Type.GetType("System.String"))); //操作
dt.Columns.Add(new DataColumn("owner",System.Type.GetType("System.String"))); //創建人
//為每一行填充數據
foreach(string d in Directory.GetFileSystemEntrIEs(fullFolderPath)){
dr=dt.NewRow(); //建新行
string[] parts=d.Split(new char[]{'\\'});
string txt=parts[parts.Length-1]; //取最後一部分的字符串,它將可能是文件名或文件夾
dr[1]=txt; //名稱name
if(File.Exists(d))//如果是文件
{
dr[0]="文件"; //類型type
int pos=currFullPath.IndexOf("NetHard");
string relaUrl=currFullPath.Substring(pos);
string
url="http://10.80.50.1/SharedSpace/"+relaUrl+"/"+txt; //
10.80.50.1為作者服務器地址,你應該將它修改為你所在服務器地址
dr[2]="下載";
}
else if(Directory.Exists(d)){//如果是文件夾
dr[0]="文件夾"; //type類型
string password=GetFolderPassWord(d); //取得文件夾密碼信息
int type=GetFolderLimitType(d);
if((passWord!="no")&&(type!=1))
dr[2]="href=PassWordValidate.ASPx?path="+d+">密封"; //操作action
else
dr[2]="進入"; //操作action
dr[3]=GetFolderOwner(d); //取文件夾創建者名
}
else
Response.Write("");
dt.Rows.Add(dr); //添加行
return dt; //返回數據表
}