系 统 主 要 的 逻 辑 结 构 和 主 要 功 能 模 块 在 persionDisk.asp 实现。主要功能模块包括:创建网络硬 盘用户个人文件夹和存取当前文件夹路径模块、文件夹 操作及切换模块、空间占用信息显示模块、文件夹详细 信息显示模块、文件夹创建模块、文件夹删除模块等。
5.1 主体逻辑结构
<!--#include file="login.asp"-->
<!--#include file="Connections/conn.asp"-->
<!--#include file="fileOperater.asp"-->
<%
if session("user_disk")=1 then
%>
<!--如果是网络硬盘用户,进行相应的网络硬盘的创建和 操作-->
<%
Else if session("user_disk")=0 then
%>
<!--如果不是网络硬盘用户给出信息-->
<%
response.write("对不起!你未授权使用网络硬盘") end if
%>
用户登录系统时,获取该用户是否是网络硬盘用户 的信息,并存储在 session("user_disk")变量中。用户成 功登录,导航到 persionDisk.asp 页面。跟据 session ("user_disk")判断是否是网络硬盘用户,如果是,进行相 应的网络硬盘的创建和操作;如果不是给出相应的提示 信息。
注意,下面的模块都是在当前用户是网络硬盘用户 的前提下调用的。
5.2 创建个人文件夹和当前路径
该模块主要用来设置当前文件夹的路径。在应用程 序文件夹下已经创建 userdisk 文件夹,本模块在 userdisk 文件夹创建以网络硬盘用户的“用户名+注册 ID”命名 的文件夹作为网络硬盘用户自己的文件夹,相应的该文 件的路径就是网络硬盘用户的根目录。
判断个人文件夹是否存在,如果不存在就创建,如
果存在就在该文件夹下进行相应的文件(夹)的操作。
dim sfp,fileFoiderName,bfileFlipExsit,userfp 'sfp 用户文件夹路径,string 类型
'fileFoiderName 文件夹的名称,string 类型
'bfileFlipExsit 标识变量,指示某个路径的文件(夹)是 否存在,bool 类型
'userfp 网络硬盘用户的根目录 sfp=server.MapPath("userDisk")
fileFoiderName=session("user_truename")&session("user_id") userfp=sfp&"\"&fileFoiderName
dim objFileOperater
set objFileOperater=new FsoCls
bfileFlipExsit=objFileOperater.IsFolderExists(userfp)
curentfcn=trim(request("fileclipName")) response.Write("curentfcn="&curentfcn)
tagDownOrUp=trim(request("tagupordawnClass")) txtFileClipName=trim(request("txtFileClipName")) if session("currentfcpSession")<>"" then else
session("currentfcpSession")=userfp end if
currentfcp=session("currentfcpSession")
'如果是在当前文件夹下操作,不改变当前文件夹路径,
'不用更新 session("currentfcpSession")变量
'如果是进行文件夹切换,需要改变当前文件夹路径的 '值,并更新到 session("currentfcpSession")变量 if tagDownOrUp="down" then
currentfcp=getCurrentFileClipPath (currentfcp,curentfcn)
end if
if tagDownOrUp="up" then
currentfcp=returnUpClass(currentfcp) end if
session("currentfcpSession")=currentfcp else
call objFileOperater.CreateFolderA(sfp,fileFoiderName) response.Redirect("PersonalDisk.asp")'创建结束后,回到 '个人网盘界面 session("currentfcpSession")为 userfp 变量;然后设置 currentfcp 变量为 session("currentfcpSession")的值。
在当前文件夹下的操作分为两类:一类是文件夹切 换,如进入下一级文件夹和返回上一级文件夹;另一类 是文件操作,如文件的上传、文件夹的创建、文件(夹)
的删除等操作。文件夹切换操作,改变当前文件夹路径 的值 currentfcp,并更新 session("currentfcpSession")变量 的值;文件操作,不改变当前文件夹路径变量的值,不 用更新更新 session("currentfcpSession")变量的值。
5.3 文件夹操作及切换模块
利用下拉列表(select)控件显示当前文件夹路径的 相对个人文件夹的相对路径和实现到下一级文件夹下 文件夹的切换;利用按钮(botton)控件实现向上一级 文件夹切换,代码如下:
<select name="curentfcn" id="curentfcn" onChange=
"return valueUrl()" >
<%
dim currentPosition,currentfcptem currentfcptem=split(currentfcp,"\") currentPosition=""
'从网络硬盘的根目录算起有盘符、应用程序文件夹、
'userdisk 文件夹,所以用户操作的文件夹应该从第四层 '开始,变量 i 取值为 4
'如果是根目录显示当前位置为"\\"
if ubound(currentfcptem)=3 then currentPosition="\\"
end if
if ubound(currentfcptem)>=4 then for i= 4 to ubound(currentfcptem)
currentPosition=currentPosition&"\"¤tfcptem(i) next
end if
%>
<option value="<%=currentPosition%>">
<%=currentPosition%></option>
<%
dim fileFolderList,ifoulderCount
fileFolderList=split(objFileOperater.FolderItem(currentfcp),"|") ifoulderCount=fileFolderList(0)
'显示子文件夹的名称 for i=1 to ubound(fileFolderList)
%>
<option value="<%=fileFolderList(i)%>">
<%=fileFolderList(i)%></option>
<%
next
%>
</select>
<input name="bttnReturnUp" type="button"
style="font-size: 10pt" onClick="return returnUpclass()"
value="返回到上级目录"
<%if currentfcp=userfp then %> disabled="true"<%end if%>>
客户端脚本,用 JavaScript 语言实现:
function valueUrl(){
var fileName="PersonalDisk.asp";
var fileclipName=curentfcn.value;
location.href=fileName+"?fileclipName="+fileclipName+"&
tagupordawnClass=down";
}
function Upclass(){
var fileName="PersonalDisk.asp";
var fileclipName=curentfcn.value;
location.href=fileName+"?tagupordawnClass=up";
}
在文件夹切换部分,首先设置下拉列表默认选项的 值和显示。通过分割 currentfcp 变量构造相对于网络硬 盘用户文件夹的路径 currentPosition 变量的值。如果在 网盘用户的根目录下,设置该值为"\\",设置下拉列表 的 默 认 选 项 的 值 为 currentPosition , 显 示 内 容 为 currentPosition。其次处理其他选项的值和显示。获取当 前路径下的子文件夹的数目和名称,依次显示出来。这 样在文件夹切换时,调用客户端脚本 valueUrl(),传递 传递文件夹名称和 tagupordawnClass 变量为“down”。
在处理返回上一级部分时,判断当前文件夹路径是 否在网络硬盘用户的根目录。如果是,就把该按钮灰掉;
如果不是,该按钮可用,点击时,简单调用客户端脚本,
传递文件夹名称和 tagupordawnClass 变量为“up”。
客户端脚本,主要用来页面的传值和回调。
<td width="164" height="20" align="center" bgcolor=
"#CCFFCC">已用空间:
<%
'计算网盘用户占用的空间,每个用户指定 1GB 的大小 dim contain,containbfb,containtiao,MySpace, Surpluscapacity MySpace=returnFileClipSize(userfp)
'个人空间目前总使用量
Surpluscapacity=1073741824- MySpace'存储剩余空间 session("Surcapacity")= Surpluscapacity
contain=MySpace/1073741824'以 1GB 容量为参考
Call sizeshow(MySpace) %>
</td>
<td width="164" height="20" align="left" bgcolor="#CCFFCC" >
<div id="shiyongliang" align="center">
<%
if containbfb=0 or Round(containbfb,5)=0 then '考虑上传文件过小
response.Write("0%") elseif containbfb<1 then
response.Write("0"&Round(containbfb,5)&"%") '保留五位小数
else
response.Write(Round(containbfb,2)&"%") '保留两位小数
end if
%>
</div>
<table width="100%" height="10" border="0" bgcolor="#FFFFFF">
<tr> MySpace。把 MySpace 与 1073741824B 容量大小做比得 到 占 用 的 比 例 值 contain 。 接 着 设 定 containbfb=
contain*100,把容量百分数转换成百分比,containtiao=
contain*164 得到单元格的宽度比例。
在显示占用空间时进行单位换算。如果空间小于 1MB 显示多少 KB,如果大于 1MB 显示多少 MB。精确 到两位有效数字。在显示占用空间百分比 containbfb 时,
如果 containbfb 为零或足够小就显示“0%”,小于 1%显 示五位有效数字,大于 1%显示两位有效数字。
最后通过指定一个单元格在表格中的相对宽度比 例 来 显 示 占用 空 间 的比 情 况 ,即 : <td width="<%=
containtiao%>" bgcolor="#00FFCC"></td>。
5.5 文件夹详细信息显示模块
在表格中显示当前目录下的文件夹和文件。显示项 为编号、名称、类型、大小、文件上传时间、是否删除。
在显示文件夹和文件时根据编号改变每一行的颜色。显 示文件夹时,名称项显示当前目录下的子文件夹的名称
以及该子文件夹下文件(夹)的个数,类型项显示“文
<table width="614" border="0" align="center" cellpadding=
"0" cellspacing="0">
<!--DWLayoutTable-->
<tr align="center" bgcolor="#FFFFCC">
<td height="30" ><strong>编号</strong></td>
<td height="30" ><strong>名称</strong></td>
<td height="30"><strong>类型</strong></td>
<td width="77" height="30" ><strong>大小</strong></td>
<td width="168" height="30"><strong>文件上传时间 </strong></td>
<td width="99" height="30"><strong>是否删除 </strong></td>
</tr>
<!--文件夹列表-->
<%
'获取当前目录下文件夹的数组
dim fileClipArray,thiscurrentfcp,NumberClipOrFile fileClipArray=split(objFileOperater.FolderItem (currentfcp),"|")
NumberClipOrFile=ubound(fileClipArray) '记下文件夹的个数
for k=1 to NumberClipOrFile
thiscurrentfcp=currentfcp&"\"&fileClipArray(k) '子文件夹路径
FileClipSize=returnFileClipSize(thiscurrentfcp) call sizeshow(FileClipSize)
dim currentfcpitem,fcpToApp currentfcpitem=split(currentfcp,"\") fcpToApp="userDisk"
for i=3 to ubound(currentfcpitem)
fcpToApp=fcpToApp&"\"¤tfcpitem(i) next
'通过 FileSystemObject 对象 fso 获取当前目录下的文件 set fso=CreateObject("Scripting.FileSystemObject") dim FileExt,FileLianJie
if fso.FolderExists(currentfcp)then Set theFolder=fso.GetFolder(currentfcp)
'获取当前目录下的文件的名称、相对应用程序的路
<a href="<%=FileLianJie%>" target="_blank"
title="<%=theFile.Name%>"><%=NewFileName%></a>
</td>
<td height="30" align="center" valign="middle"><%=
FileExt%></td>
<td width="77" height="30" valign="middle">
<%
call sizeshow(theFile.size) %>
</td>
<td width="168" height="30" valign="middle"><%=
theFile.DateLastModified%></td>
<td width="99" height="30" valign="middle">
<%response.write "<a href='delfile.asp?FileName=
"¤tfcp&"\"&theFile.Name&" ' onclick='return ConfirmfileDel();'>删除</a> " %>
</td>
</tr>
在显 示当前目录 下的文件夹 列表时,通 过调用 objFileOperater.FolderItem()获得当前目录下的文件夹的
字符串,然后用 split()函数进行分割得到当前目录下的 文件夹集合并存到一个数组变量 fileClipArray 中。对每 一个子文件夹生成了该子文件夹的路径。在显示文件编 号时,显示了文件夹数组的下标,显示文件夹名称时,
显示文件夹数组的第 k 个元素 fileClipArray(k),并通过 调用 returnFileClipNum()显示该子文件夹下的文件夹的 数目。显示文件类型项时直接显示“文件夹”。显示大 小项时,调用 sizeShow()函数对文件的大小进行的单位 转换。在显示是否删除项时,显示文件夹是否删除该文 件夹的链接。
在显示文件列表时,通过 FileSystemObject 对象 fso 获取当前目录下的文件,对每个文件,生成了文件相对 应用程序的路径、文件的编号和类型。由于要在文件列 表中提供文件的下载,要构造每个文件相对应用程序的 相 对 路 径 , 即 : FileLianJie=fcpToApp&"\"&theFile.
Name。在显示文件名称项时,给出了文件下载的路径 操作对象 objFileOperater 进行创建。在进行文件创建时,
首先判断是否重名,如果重名给出出错信息,如果没有 重名直接创建,实现代码如下:
<%
dim flieClipName
flieClipName=trim(request("txtFileClipName"))
if flieClipName="" or flieClipName="请输入新文件夹名" then
%>
<!--加载表单输入文件夹的名称-->
<form name="creteNewFileClip" action=
"createNewFileClip.asp" method="Post">
<table width="300" border="0" cellpadding="0"
cellspacing="0">
<tr>
<td width="104" height="50" align="center"
valign="middle">新文件夹名 </td>
<td width="196" align="center" valign="middle">
<input name="txtFileClipName" type="text"
<tr align="center" valign="middle">
<td height="30" colspan="2"> currentfcpSession=session("currentfcpSession") established=false
window.opener.location.href="PersonalDisk.asp?
tagkk=backPost";
window.opener.location.href="PersonalDisk.asp?
tagkk=backPost";
页面首先接受文本框控件 txtFileClipName 传递过 来的文件夹名称 flieClipName。如果该页面由“创建新 文件夹”按钮控件调用,接收到的 flieClipName 取值为 空,需要加载表单来让以后输入文件夹名称。如果加载 表单后没有输入有效的文件夹名称(没有改变文本框控
件的“请输入新文件夹名”就提交创建),客户端脚本 会把该控件的值置空,并提示重新加载表单。因此页面 接收到的文件夹名称是否为空或等于“请输入新文件夹 名”就要求加载表单。其他就用接收到的文件夹名称来 创建文件夹。
在进行文件夹创建时,利用了文件操作对象 objFile Operater。首先获取当前文件夹的路径 currentfcpSession
=session("currentfcpSession")。调用 objFileOperater 的函 数 IsFolderExists()判断当前路径下是否有与接收到的文 件夹名称相同的文件夹,并给标志变量 established 赋值。
跟据标志变量的值决定是否创建该文件夹,并给出 反馈信息。如果没有重名的文件夹 established =false,
调用 objFileOperater.CreateFolderA()当前路径下创建一 个新文件夹,给出创建成功的信息;如果有重名的文件,
给出文件重名的信息。
5.8 文件(夹)删除模块
在该模块中,首先调用客户端脚本给出是否删除信
在该模块中,首先调用客户端脚本给出是否删除信