• 沒有找到結果。

系 统 主 要 的 逻 辑 结 构 和 主 要 功 能 模 块 在 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&"\"&currentfcptem(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&"\"&currentfcpitem(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=

"&currentfcp&"\"&theFile.Name&" ' onclick='return ConfirmfileDel();'>删除</a>&nbsp;" %>

</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 文件(夹)删除模块

在该模块中,首先调用客户端脚本给出是否删除信

在该模块中,首先调用客户端脚本给出是否删除信

相關文件