Asp classic 在经典ASP中列出文件夹结构
我已经为我工作的公司开发了一个ASP安全页面。有一个登陆(登录页面),一旦您通过身份验证,您将被带到一个包含多个子页面链接的页面。每个子页都有一个文件夹结构。例如:有一个会议纪要的标题,下面是引用PDF的链接,其中包含信息。可能有3或4个标题与下面链接的文档 原始版本有一个运行的PHP脚本,它将从一个文件夹结构同步服务器上的实时站点,该文件夹结构将被模拟到实时站点上。因此,如果我有一个名为Folder1的文件夹和名为test1 test2 test3的子文件夹。。实时站点将相应地显示它们。因为该站点现在是ASP而不是PHP。。PHP脚本不再工作(因为PHP不能很好地与ASP配合使用) 我在网上找到了一个代码片段,它在某种程度上符合我想要实现的目标(即文件夹/子文件夹/文件名结构),但我目前仍无法理解如何链接文件,以便在单击时打开它们。我一直在文件名中看到%25。我知道%20与空白相同,因为我处理的文件和文件夹名称中包含空格,这似乎是我的问题。我尝试添加%20,但空格变为“%2520” 如果你看下面的代码,有一个指向底部的链接称为“MapURL”。当我试图找出%25的来源时,我已经对该链接进行了注释。 有人对如何让链接工作有什么想法吗 下面是片段Asp classic 在经典ASP中列出文件夹结构,asp-classic,Asp Classic,我已经为我工作的公司开发了一个ASP安全页面。有一个登陆(登录页面),一旦您通过身份验证,您将被带到一个包含多个子页面链接的页面。每个子页都有一个文件夹结构。例如:有一个会议纪要的标题,下面是引用PDF的链接,其中包含信息。可能有3或4个标题与下面链接的文档 原始版本有一个运行的PHP脚本,它将从一个文件夹结构同步服务器上的实时站点,该文件夹结构将被模拟到实时站点上。因此,如果我有一个名为Folder1的文件夹和名为test1 test2 test3的子文件夹。。实时站点将相应地显示它们。因为该
dim路径
path=“服务器上文件夹的路径”
ListFolderContents(路径)
子列表文件夹内容(路径)
dim fs、文件夹、文件、项目、url
设置fs=CreateObject(“Scripting.FileSystemObject”)
set folder=fs.GetFolder(路径)
'显示目标文件夹和信息。
Response.Write(“”&folder.Name&“)”——“_
“&folder.Files.Count&”Files“)
'如果folder.SubFolders.Count>0,则
'Response.Write(folder.SubFolders.Count&“directories,”)
"完"
'Response.Write(四舍五入(folder.Size/1024)和'KB总计'_
“&”
“&vbCrLf)
响应。写入(“”&vbCrLf)
'显示子文件夹列表。
对于folder.SubFolders中的每个项目
ListFolderContents(项目)
下一个
'显示文件列表。
对于文件夹.Files中的每个项目
'url=MapURL(item.path)
'响应。写入(“- -”_
回答。写(“
- -”_
&项目名称&“”_
&“
”&vbCrLf)
下一个
响应。写入(“
”&vbCrLf)
响应。写入(“”&vbCrLf)
端接头
函数映射URL(路径)
dim根路径,url
'将物理文件路径转换为超文本链接的URL。
rootPath=Server.MapPath(“/”)
url=Right(路径,Len(路径)-Len(根路径))
MapURL=Replace(url“\”,“/”)
端函数
您可能需要在href(“”)处加上引号。最好的方法是查看生成的源代码(从结果页面),如“
基本上,如果您只使用一个引号,它只会关闭字符串,但是您缺少href=之后所需的HTML引号和关闭的引号。您的代码有几处错误
- 首先也是最重要的是,您根本没有对输出的值进行编码。这是一个很大的错误。对于进入HREF属性的内容,您缺少URL编码,而对于其他内容,您缺少HTML编码
- 接下来,每次调用递归的
函数,都会创建一个新的ListFolderContents()
。这会造成不必要的浪费,而且一旦要输出的文件超过几个,速度就会变慢FileSystemObject
- 递归函数应该将
对象作为第一个参数,而不是路径。这会使事情变得容易得多文件夹
- 您输出的HTML结构无效。
不能合法地成为
的子级
pathcode()
函数,它将相对路径转换为正确编码的URL。其他事情应该是不言自明的:
ListFolder“P:\ATH\TO\THE\FOLDER\ON\THE\SERVER”
--主要职能----------------------------------------------------
子列表文件夹(路径)
根路径
设置fs=CreateObject(“Scripting.FileSystemObject”)
rootPath=Replace(路径,Server.MapPath(“/”),“&\”
ListFolderContents fs.GetFolder(路径),PathEncode(根路径)
端接头
' ----------------------------------------------------------------------
子列表FolderContents(文件夹,相对路径)
弱智儿童
说“”
说“- ”&h(文件夹名称)&”
对于folder.SubFolders中的每个子文件夹
如果不是孩子,那么
ListFolderContents子级、relativePath和PathEncode(child.Name)和“/”
如果结束
下一个
相对路径=h(相对路径)
对于文件夹.Files中的每个子级
如果不是孩子,那么
说“
”
如果结束
下一个
说“
”
端接头
“--助手功能/速记---------------------------------------
附属法例(s)
响应。编写s&vbNewLine
端接头
功能h(s)
h=服务器.HTMLEncode
端函数
函数路径编码
'这将创建一个更正确的Server.URLEncode变体
路径编码=替换(s,“\”,“/”)
PathEncode=Server.URLEncode(PathEncode)
路径编码=替换(路径编码,“+”,“%20”)
PathEncode=替换(PathEncode,“%2F”,“/”)
PathEncode=替换(PathEncode,“%2E”,“)
PathEncode=Replace(PathEncode,“%5F”和“389;”)
端函数
函数IsHidden(文件)
IsHidden=File.Attributes和2=2
端函数
注释
- 使用
将CSS样式(即粗体等)应用于文件夹名称 - 该函数不会输出隐藏的文件或目录
参数用于在折叠时尽可能降低工作负载relativePath