当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 用ASP/ASP.NET实现网络空间管理

ASP.NET
asp.net GridView控件中模板列CheckBox全选、反选、取消
asp.net GridView 删除时弹出确认对话框(包括内容提示)
asp.net DropDownList 三级联动下拉菜单实现代码
asp DataTable添加列和行的三种方法
Asp.net 页面调用javascript变量的值
asp.net 长文章通过设定的行数分页
asp.net 定时间点执行任务的简易解决办法
asp.net 页面延时五秒,跳转到另外的页面
asp.net 动态输出透明gif图片
asp.net DataList与Repeater用法区别
asp.net Javascript获取CheckBoxList的value
asp.net程序在调式和发布之间图片路径问题的解决方法
asp.net下生成英文字符数字验证码的代码
asp.net 页面版文本框智能提示JSCode (升级版)
ASP.NET URL伪静态重写实现方法
ASP.NET 2.0 中Forms安全认证
asp.net 动态添加多个用户控件
asp.net Repeater显示父子表数据,无闪烁
asp.net 无法获取的内部内容,因为该内容不是文本 的解决方法
asp.net GridView排序简单实现

用ASP/ASP.NET实现网络空间管理


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 82 ::
收藏到网摘: n/a

前言

⑴电子阅览室、计算机房、网吧等公共上机场所由于使用频繁、维护滞后等原因,输出系统如软驱等设备受损的现象普遍,往往在你需要将加工后的数据输出时才发现输出设备不能工作而大为光火,并且许多计算机房为了节省成本,在联网的计算机上并不配全必要的输出设备。

⑵电脑普及的同时使的人们对它的依赖越来越强,很多办公事务已经离不开电脑。换句话说,办公人员的电脑里开始存放着许多重要的办公与私人数据。而这些数据,在大多数情况下是唯一的,意即它们的拥有者并没有把它们做一份副本存放在不同的电脑上,其安全性完全取决于它们的拥有者的电脑的稳定性。

⑶Internet的普及拉近了人们之间的距离,让人们交流变得更为便捷,但是我们每天需要在家庭、办公室、网吧等不同场所上网,怎样才能持续对某份文档进行编辑处理呢?或许通过优盘或者是移动硬盘之类的移动存储设备能够随身携带这些资料,不过随身多带一个这样的设备特别是移动硬盘总归不是很方便,而且不同的场所、不同的设备、不同的操作系统对优盘或移动硬盘的支持不尽相同,使用者的电脑水平也不尽相同。

……

由于这些事实,使的网络存储作为一种需要登上了舞台。

目前实现网络存储的方式有很多种,比如电子邮件、FTP、网上邻居、HTTP等等。其中,FTP功能最为强大,但使用起来却稍显复杂,一大堆设置足以让许多人望而止步,尤其用户数量不可预见时,针对特殊需求用户的设置将更加繁琐;电子邮件是大家所熟悉的了,但在局域网内部,财务、劳资等文件资料需通过这种方式交流不是好办法,而且,当你的文件足够大时对邮件空间是个致命冲击;网上邻居通过在本机上指定共享的Web文件夹并放置文件,一定范围内的用户可以访问到这些文件,然而这种方式使用的范围相当有限,通常在同一个DNS段地址内的用户才能顺利访问,其它尤其是Internet上的用户,很难使用,此外同电子邮件类似,它的使用也不直观,很多时候你不得不在许多列表计算机上一层层展开搜索才有可能获取你想要的资源!以上所述这些网络存储方式还有一个共同的缺点:即管理员对存储在网络存储中的文件的使用情况无法有一个比较清晰的了解,只能根据文件的存储时间来决定是否对其进行空间清理。

本文介绍一种通过HTTP实现的比较简单的网络存储方式。这种方式是在WINDOWS平台上通过IIS与ASP/ASP.NET来实现,不仅使用简单、可上载任意类型的文件,而且可以对使用者使用空间进行限制,一次传输小到20字节、大到几百兆都可以由管理者进行管理,另外,文件的安全性也得到了保障,只有文件拥有者及得到授权者才可回载文件。读懂本文第二大点中的数据结构及第三大点中的上传源码,将帮助你自己做一个网络存储,你就不必依赖于市场上提供的免费网络存储,使网络内部的敏感数据文件的安全牢牢掌握在自己手中。

概述与基本功能

安装一台作为网络存储宿主的服务器,操作系统采用windows平台,配套IIS5.0,设置好WEB服务,在主网站下建立一个虚拟网站,指向网络存储,如:d:\netspace\spacenet\myspace。所有的asp及asp.net源码放置在主网站(如:c:\inetpub\wwwroot)下,d:\netspace\spacenet\myspace下将放置用户上传的文件(虚拟网站改变,在源码中也应作相应调整)。

1、用到的基本数据库及结构:

⑴ftpsapce.mdb:拥有表userlist,表基本结构:

Id:顺序号,自动生成;
Xh:用户帐号,注册及验证生成;
Xm:用户姓名,注册及验证生成;
Kl:用户口令,注册及验证生成;
Maxspace:用户空间最高限额,注册取默认值,管理员可以通过管理重设定;
Nowspace:用户目前占用空间的数量;
Lastaccessday:用户最近一次存取时间,供管理员管理空间时参考;
Fromday:用户注册时间;
Checkx:用户验证已否标志。

⑵Filelist.mdb:拥有表files,表基本结构:

Id:顺序号,自动生成;
Filename:文件名,上载系统判断生成;
Fsize:文件大小数值;
Xh:用户帐号;
Upday:上载时间;
Filescript:文件描述,是用户上载时的文件的路径及原文件名,供用户加载时参考;

2、基本功能

⑴用户登录主网站,进入网站主页面,给出用户基本资料进行用户注册。

⑵管理员根据用户注册资料予以审核,设定用户最大使用空间。

⑶审核通过的用户上传文件到网络存储。系统判定用户合法性及文件合法性,在数据库中对用户上传的文件及用户资料进行登记。

⑷审核过的用户通过下载功能对自己上传的文件进行回载或删除。

⑸管理员根据用户数据库及文件数据库对网络空间进行管理。

⑹扩展过的系统允许得到授权的用户对授权用户的上传文件进行下载。

上载模块基本源码

限于篇幅,本文仅给出上载模块的基本源码,需要更多源码可通过E-mail向作者索取,源码中以***开头的行是作者为了读者阅读方便而加上的注释。(以下摘自upfile.aspx)

<%@PageLanguage="VB"Debug="true"%>
<%@importnamespace="System.Data"%>
<%@importnamespace="System.Data.oledb"%>
<html>
<scriptlanguage="vbscript"runat="server">
subuploadfile(senderasobject,easeventargs)
 iffileup.postedfile.contentlength<20then
errors.text="这么小的文件也要上传,背背就可以了."
fileinfo.visible=false
exitsub
 else
errors.text="检验正常"
fileinfo.visible=true
endif

***以上检查上传文件大小
respace.text="0"
nowspace.text="0"

***respace指剩余空间,nowspace指已用空间

dimxh1asstring=user1.value
dimkl1asstring=pass1.value

***xh1指帐号,kl1指口令

dimobjconnstrasstring="provider=microsoft.jet.oledb.4.0;datasource="
&server.mappath("ftpspace.mdb")

***以上两行在源码中应为同一语句

dimobjconnasoledbconnection=newoledbconnection(objconnstr)
dimsql1asstring="select*fromuserlistwherexh='"+xh1+"'andkl='"+kl1+"'"
dimobjrsccasoledbcommand=newoledbcommand(sql1,objconn)
objconn.open()
dimobjrsasoledbdatareader=objrscc.executereader()
dimixasinteger=0
dimmaxsaslong
dimnowsaslong
whileix=0
 ifobjrs.read()then
ifobjrs.item("xh")=xh1then
 ifobjrs.item("kl")=kl1then
ifobjrs.item("checkx")=1then
 ix=ix+1
 maxs=objrs.item("maxspace")
 nows=objrs.item("nowspace")
endif
 endif
endif
 else
ix=-1
 endif
endwhile

***以上判定帐号与口令是否合法

ifix<=0then
 errors.text="帐号口令错!或用户尚未通过认证,请等待管理员认证!"
else

iffileup.postedfile.contentlength>maxs-nowsthen
 iffileup.postedfile.contentlength>=maxsthen
errors.text="文件长度大于赋予空间大小,不能上传!"
 else
errors.text="可用空间不足,请删除旧文件!"
 endif

***以上判定用户空间的可用性
else
 dimobj4strasstring="provider=microsoft.jet.oledb.4.0;
 datasource="&server.mappath("filelist.mdb")

***以上两行在源码中为同一语句
 dimobj4asoledbconnection=newoledbconnection(obj4str)
 dimsql10asstring="select*fromfiles"
 dimobjrc1asoledbcommand=newoledbcommand(sql10,obj4)
 obj4.open()
 dimobjrsxasoledbdatareader=objrc1.executereader()
 dimfn11aslong=0
 whileobjrsx.read()
fn11=objrsx("filename")
 endwhile
 dimfn1asstring
 fn1=cstr(fn11+1)

***以上为用户上传文件起一个唯一的主文件名
 dimobjc1strasstring="provider=microsoft.jet.oledb.4.0;
 datasource="&server.mappath("filelist.mdb")

***以上两行在源码中为同一语句
 dimobjc1asoledbconnection=newoledbconnection(objc1str)
 dimsql3asstring="insertintofiles(filename,fsize,xh,filescript,upday)
values("+cstr(fn1)+","+cstr(fileup.postedfile.contentlength)+",'"
+xh1+"','"+fileup.postedfile.filename+"','"+cstr(now())+"')"

***以上三行在源码中为同一语句
 objc1.open()
 dimobjrs1asoledbcommand=newoledbcommand(sql3,objc1)
 dimfn2asstring
 fn2="d:/netspace/spacenet/myspace/"&cstr(fn1)&".zip"

***给出用户上传文件的绝对路径及完整文件名
 fsize.text=cstr(fileup.postedfile.contentlength)
 ftype.text=fileup.postedfile.contenttype
 fname.text=fileup.postedfile.filename
 username.text=user1.value
 fileup.postedfile.saveas(fn2)
 objrs1.ExecuteNonQuery()
 objrs.close
 dimsql5asstring="updateuserlistsetnowspace="+cstr(nows+fileup.postedfile.contentlength)+
",lastaccessday='"+cstr(now())+"'wherexh='"+xh1+"'"

***以上两行在源码中为同一语句

 dimobjrncasoledbcommand=newoledbcommand(sql5,objconn)
 objrnc.executenonquery()
 respace.text=cstr(maxs-nows-fileup.postedfile.contentlength)&"字节."
 nowspace.text=cstr(nows+fileup.postedfile.contentlength)&"字节."

***以上作上传动作,并计算用户的已用总空间及剩余总空间
 endif
endif
endsub
</script>
<body>
<formenctype="multipart/form-data"runat="server">
<table>
<tr><td>帐号:</td><td><inputid="user1"runat="server"></td></tr>
<tr><td>口令:</td><td><inputtype="password"id="pass1"runat="server"></td></tr>
<tr><td>文件:</td><td><inputtype="file"id="fileup"runat="server"></td></tr>
<tr><td></td><td><asp:buttonid="upload"onclick="uploadfile"text="上传"
runat="server"/></td></tr>
</table>
</form><hr>
<divid="fileinfo"visible="false"runat="server">
原文件名:<asp:labelid="fname"runat="server"/><br>
字节大小:<asp:labelid="fsize"runat="server"/><br>
文件类型:<asp:labelid="ftype"runat="server"/><br>
用户帐号:<asp:labelid="username"runat="server"/><br>
剩余空间:<asp:labelid="respace"runat="server"/><br>
已用空间:<asp:labelid="nowspace"runat="server"/><br>
上传状态:<asp:labelid="errors"runat="server"/>
</div>
***以上在浏览器中告诉用户文件上传前后的相关信息
</body>
</html>

结束语

本文所述的方法基于无组件技术,在文件的安全性及个人隐私方面考虑的比较多,最适合在windowsserver2003配合IIS6.0平台上使用,方法简单安全,稍加扩展,如在userlist里添加用户号、组号,在files里添加组号,即可对文件的权限进行设定,可方便实现文件的网络提交、验证、共享。配合磁盘阵列,则在数据安全方面将有质的提升。