分享
 
 
 

基于ASP.NET与XML的网络硬盘开发

王朝asp·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

引言

在传输文件时常常采用FTP、Email以及"网上邻居"三种方式,这几种方式各有优缺点。FTP功能强大,但使用起来较为复杂,需要进行详细设置满足各种不同需求,当用户数量不可预见时,设置会很繁琐。Email使用方便,连入Internet就可进行文件传输,但安全性不高,对于比较重要的文件一般不采用此方式。"网上邻居"通过在本机上指定共享的Web文件夹并放置资源文件,用户在一定范围内可以访问这些文件,但是范围相当有限,通常在同一个DNS段地址内的用户才能顺利访问,并且在许多列表计算机上层层展开搜索来获取资源也比较费时。以上几种方式主要是"点对点"进行传输,对于"点对多"的共享模式则需要寻求另外的传输途径,网络硬盘便是一种较好的解决方式。只要用户具备足够权限,就可进行各种操作,如同使用本地计算机一样。它以HTTP方式传输,以WEB形式展现在所有用户面前,通过浏览器方式进行访问,这样,"一块空间,资源互见"的共享模式得以实现。

网络硬盘开发

ASP.NET是一种全新的服务器端技术,它采用CLR(Common Language Runtime)结构的程序设计平台,可在服务器端生成功能强大的WEB应用程序,同时也可保留用户完整的应用状态,提供最佳的控制方式[1]。XML是数据访问领域的新技术,具有自描述性、内容与显示相分离、可扩展性、独立于平台等特点[2],提供了一套跨平台、跨网络、跨程序语言的数据描述方式,己逐渐成为科学与业务应用中数据表示及应用的数据交换标准格式[3]。将这两种技术结合起来,可开发出功能强大的网络硬盘系统,例如可以查看文件夹内容,创建新文件夹以及设置访问权限,对文件及文件夹进行相关操作,上传文件到指定文件夹,下载文件到本机或在线查看文件内容等等。下面分别用C#语言实现相应功能。

1、查看文件夹内容

进入到指定的根文件夹,通过数据绑定控件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-1];

dr[1]=txt;//名称name

if(File.Exists(d))//如果是文件

{

dr[0]="文件";//类型type

Int pos=currFullPath. IndexOf ("Net Hard");

String relaUrl=currFullPath. Substring (pos);

string url="http://202.115.64.13/SharedSpace/"+relaUrl+"/"+txt;//202.115.64.13为服务器地址

dr[2]="<a href="+url+" target=_blank"+">下载</a>";

}

Else if (Directory. Exists(d)){//如果是文件夹

dr[0]="文件夹";//type类型

string password=GetFolderPassword(d);//取得文件夹密码信息

Int type=GetFolderLimitType (d);

If ((password! ="no")&&(type! =1))

Dr [2]="<a href=PasswordValidate.aspx? path="+d+">密封</a>";//操作action

Else

Dr [2]="<a href=Default.aspx? path="+d+">进入</a>";//操作action

dr[3]=GetFolderOwner(d);//取文件夹创建者名

}

Else

Response.Write("<script>alert(’无对象可绑定!’)</script>");

dt.Rows.Add(dr);//添加行

return dt;//返回数据表

}

}

此方法取出指定文件夹下的内容分别处理:如果是文件,则显示"下载"链接指向服务器文件的Url地址;对于文件夹,若是"进入受限"则显示"密封"导入到密码验证页,否则显示"进入"链接到初始页。

2、创建文件夹及设置访问权限

在当前路径下输入新文件夹名称来创建新文件夹,通过调用.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=’1.0’ encoding=’gb2312’?>";

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表示限制操作的类型("0"表示进入受限,"1"表示删除受限)。程序首先判断存储文件夹信息的文件是否存在,不存在则动态创建文件,之后新建文件夹时,只需添加文档片段即可。这里,对XML文件的读写通过文档对象模型DOM实现,由于此处XML文件不会很大,因此对内存资源要求不会太高,速度会很快。

3、对文件及文件夹的操作

对文件的操作包括"下载"和"删除"两种,用下面的语句实现下载功能:

dr[2]="<a href="+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是待删除文件夹的完整路径。程序使用循环语句,查找文件夹中的内容,若是文件则直接删除,若是文件夹,则递归调用方法自身来删除子文件夹,文件夹清空后再完成删除操作。

4、文件上传

.NET提供的类库HttpPostedFile和HttpFilesCollection可以访问上传到服务器的文件,并且可以控制文件上传过程。HttpPostedFile类封装已上传到服务器的文件对象,其方法和属性提供对每个文件内容和属性的访问;HttpFilesCollection类为多个HttpPostedFile对象提供一个容器,保存上传给服务器的数据结构的类,利用被传送的文件集合的Files属性从HttpRequest对象加以访问。

1)客户端表单的编码类型Enctype 设置为multipart/form-data的MIME格式,提交表单使用HTTP的post方法:

<Form id="form1" method="post" enctype="multipart/form-data

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有