快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

ASP.NET实现网络空间治理

前言

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

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

  ⑶ 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)

<%@ Page Language=\"VB\" Debug=\"true\" %>
<%@ import namespace=\"System.Data\" %>
<%@ import namespace=\"System.Data.oledb\" %>
<html>
<script language=\"vbscript\" runat=\"server\">
sub uploadfile(sender as object, e as eventargs)
 if fileup.postedfile.contentlength<20 then
  errors.text=\"这么小的文件也要上传,背背就可以了.\"
  fileinfo.visible=false
  exit sub
 else
  errors.text=\"检验正常\"
  fileinfo.visible=true
end if

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

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

dim xh1 as string =user1.value
dim kl1 as string =pass1.value

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

dim objconnstr as string=\"provider=microsoft.jet.oledb.4.0;data source=\"
& server.mappath(\"ftpspace.mdb\")

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

dim objconn as oledbconnection = new oledbconnection(objconnstr)
dim sql1 as string=\"select * from userlist where xh=\\\'\"+xh1+\"\\\' and kl=\\\'\"+kl1+\"\\\'\"
dim objrscc as oledbcommand= new oledbcommand(sql1,objconn)
objconn.open()
dim objrs as oledbdatareader = objrscc.executereader()
dim ix as integer=0
dim maxs as long
dim nows as long
while ix=0
 if objrs.read() then
  if objrs.item(\"xh\")=xh1 then
   if objrs.item(\"kl\")=kl1 then
    if objrs.item(\"checkx\")=1 then
     ix=ix+1
     maxs=objrs.item(\"maxspace\")
     nows=objrs.item(\"nowspace\")
    end if
   end if
  end if
 else
  ix=-1
 end if
end while

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

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

if fileup.postedfile.contentlength>maxs-nows then
 if fileup.postedfile.contentlength>=maxs then
  errors.text=\"文件长度大于赋予空间大小,不能上传!\"
 else
  errors.text=\"可用空间不足,请删除旧文件!\"
 end if

*** 以上判断用户空间的可用性
else
 dim obj4str as string=\"provider=microsoft.jet.oledb.4.0;
 data source=\" & server.mappath(\"filelist.mdb\")

*** 以上两行在源码中为同一语句
 dim obj4 as oledbconnection = new oledbconnection(obj4str)
 dim sql10 as string=\"select * from files\"
 dim objrc1 as oledbcommand= new oledbcommand(sql10,obj4)
 obj4.open()
 dim objrsx as oledbdatareader = objrc1.executereader()
 dim fn11 as long =0
 while objrsx.read()
  fn11=objrsx(\"filename\")
 end while
 dim fn1 as string
 fn1=cstr(fn11+1)

*** 以上为用户上传文件起一个唯一的主文件名
 dim objc1str as string=\"provider=microsoft.jet.oledb.4.0;
 data source=\" & server.mappath(\"filelist.mdb\")

*** 以上两行在源码中为同一语句
 dim objc1 as oledbconnection = new oledbconnection(objc1str)
 dim sql3 as string=\"insert into files(filename,fsize, xh,filescript,upday)
values(\"+cstr(fn1)+\",\"+cstr(fileup.postedfile.contentlength)+\",\\\'\"
+xh1+\"\\\',\\\'\"+fileup.postedfile.filename+\"\\\',\\\'\"+cstr(now())+\"\\\')\"

*** 以上三行在源码中为同一语句
 objc1.open()
 dim objrs1 as oledbcommand=new oledbcommand(sql3,objc1)
 dim fn2 as string
 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
 dim sql5 as string=\"update userlist set nowspace =\"+cstr(nows+fileup.postedfile.contentlength)+
\",lastaccessday=\\\'\"+cstr(now())+\"\\\' where xh=\\\'\"+xh1+\"\\\'\"

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

  dim objrnc as oledbcommand= new oledbcommand(sql5,objconn)
 objrnc.executenonquery()
 respace.text=cstr(maxs-nows-fileup.postedfile.contentlength)&\"字节.\"
 nowspace.text=cstr(nows+fileup.postedfile.contentlength)&\"字节.\"

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

  结束语

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


返回类别: 教程
上一教程: 深入讲解 ASP+ 验证(二)
下一教程: 如何使用asp+ 动态创建页面元素

您可以阅读与"ASP.NET实现网络空间治理"相关的教程:
· 用Asp.net实现简朴的文字水印
· ASP.NET 2.0轻松实现数据库应用开发
· 在ASP.Net中两种利用CSS实现多界面的方式
· ASP.NET 打造互联网未来空间站(3)
· 在.net中实现与ASP完全兼容的MD5算法(包括中文字符)
    微笑服务 优质保证 索取样品