用ASP/ASP.NET實現網路空間管理

來源:互聯網
上載者:User
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" 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裡添加組號,即可對檔案的許可權進行設定,可方便實現檔案的網路提交、驗證、共用。配合磁碟陣列,則在資料安全方面將有質的提升。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.