注册
登录
会员
统计
帮助
HOME页
武穴人论坛
»
技术交流
» Asp.net Xml开发网络硬盘.
网页搜索
站内搜索
搜索
‹‹ 上一主题
|
下一主题 ››
发新话题
发布投票
发布商品
发布悬赏
发布活动
发布辩论
发布视频
打印
Asp.net Xml开发网络硬盘.
beida-001
新手上路
个人空间
发短消息
加为好友
当前离线
1
#
大
中
小
发表于 2008-3-5 11:38
只看该作者
Asp.net Xml开发网络硬盘.
文件传送常用的三种方式FTP、Email及“网上邻居”都在一定程度上实现了文件数据的交流,但它们都主要面向“点对点”的传送,无法实现“一块空间,资源互见”的应用需求,这种基于“点对多”的共享模式需要寻求另外的传输途径,网络硬盘就是一种很好的解决方式。常用传输方式及其在特定环境下面临的困难我们经常有这样的应用需求:通过网络交换公共数据文件以实现资源共享,同时保护私有数据不被非法访问,并使用简单、直观的方式操作。
我们常用的文件传输FTP、Email邮件、网上邻居都能实现文件的传送。其中,"Ftp"功能最为强大,但使用起来却稍显复杂,一大堆设置足以让许多人望而止步,尤其用户数量不可预见时,针对特殊需求用户的设置将更加繁琐;"Email"是大家所熟悉的了,但它的传送不仅需要你连入 Internet,而且它的安全性也是个问题,在企业内部,财务、劳资等文件资料需通过这种方式交流不是好办法;"网上邻居"是又一种传送文件的方法,通过在本机上指定共享的Web文件夹并放置资源文件,一定范围内的用户可以访问到这些文件,然而这种方式使用的范围相当有限,通常在同一个DNS段地址内的用户才能顺利访问,其它尤其是Internet上的用户,很难使用,此外同Email类似,它的使用也不直观,很多时候你不得不在许多列表计算机上一层层展开搜索才有可能获取你想要的资源!由此看来,以上三种方式虽然在一定程度上实现了文件数据的交流,但它们都主要面向"点对点"的传送(你只能被动地等对方放置数据而不能主动"可视化"地索取),无法实现"一块空间,资源互见"的应用需求,这种基于"点对多"的共享方式需要寻求另外的传输途径,网络硬盘就是一种很好的解决方式。网络硬盘的优势网络硬盘(也称共享空间),是服务器上的一块硬盘空间,在这里,如果你具备足够的权限,你可以对它随意操作,就象使用你的本地计算机一样。要知道,这一切以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]="<A
href=PasswordValidate.aspx?path="+d+">密封"; //操作action
else
dr[2]="
进入";
//操作action
dr[3]=GetFolderOwner(d); //取文件夹创建者名
}
else
Response.Write(" ");
dt.Rows.Add(dr); //添加行
return dt; //返回数据表
}
UID
4543
帖子
2
精华
0
积分
2
阅读权限
10
在线时间
0 小时
注册时间
2008-3-5
最后登录
2008-3-7
查看详细资料
TOP
大浪
论坛元老
个人空间
发短消息
加为好友
当前在线
2
#
大
中
小
发表于 2008-3-5 15:27
只看该作者
重要数据还是放U盘比较好吧.
可以打印出来的都打印的.
相对来说ftp最简单
于千百万人之中,于千百万年,于时间的无涯的际野,遇见你所要遇见之人,没有早一步,也没有晚一步,恰巧赶上了,那也没有什么话可说,惟有轻轻地问一声:哦,你也在这里吗?
UID
868
帖子
876
精华
4
积分
4430
阅读权限
90
在线时间
61 小时
注册时间
2005-8-27
最后登录
2008-5-13
查看详细资料
TOP
‹‹ 上一主题
|
下一主题 ››
秘密花园
故乡明月
武穴新闻
身在他乡
活动专区
信息发布
生活娱乐
潮流时尚
影音前线
健康养生
图片纷飞
真我风采
网络文摘
互动交流
谈天说地
情感空间
文学天地
体育运动
技术交流
小众话题
投资创业
English Garden
清谈馆
游戏人生
过儿专栏
论坛事务
议事大厅
控制面板首页
编辑个人资料
积分记录
公众用户组
个人空间管理
基本概况
流量统计
客户软件
发帖量记录
版块排行
主题排行
发帖排行
积分排行
交易排行
在线时间
管理团队
管理统计