asp-classic – 在Classic ASP中列出文件夹结构
我为我所工作的公司开发了一个ASP安全页面.有一个登陆(登录页面),一旦您通过身份验证,您将进入一个包含多个子页面链接的页面.每个子页面都有一个文件夹结构.例如:有一个会议纪要标题,然后在下面,缩进是引用包含信息的PDF的链接.可能有3或4个标题,文档链接在下面.
原始版本有一个PHP脚本,它运行并将从文件夹结构同步到服务器上的实时站点,该文件夹结构将被模仿到实际站点上.因此,如果我有一个名为Folder1的文件夹和名为test1 test2 test3的子文件夹,则实时网站会相应地显示它们.由于该站点现在是ASP而不是PHP .. PHP脚本不再起作用(因为PHP不能很好地与ASP一起使用). 我发现一个在线片段有点适用于我想要实现的目标(即文件夹/子文件夹/文件名结构),但是我现在卡在了如何链接文件以便在单击时打开它们.我一直在文件名中看到%.我知道是一个空格,因为我正在处理包含空格的文件和文件夹名称,这似乎是我的问题.我已尝试添加一个但空格变为“%20”. 如果您查看下面的代码,则会在底部显示一个名为“MapURL”的链接.当我试图找出%来自哪里时,我已将此链接注释掉了. 这是片段. dim path path = "PATH TO THE FOLDER ON THE SERVER" ListFolderContents(path) sub ListFolderContents(path) dim fs,folder,file,item,url set fs = CreateObject("Scripting.FileSystemObject") set folder = fs.GetFolder(path) 'Display the target folder and info. Response.Write("<ul><b>" & folder.Name & "</b>") '- " _ ' & folder.Files.Count & " files,") 'if folder.SubFolders.Count > 0 then ' Response.Write(folder.SubFolders.Count & " directories,") 'end if 'Response.Write(Round(folder.Size / 1024) & " KB total." _ ' & "</ul>" & vbCrLf) Response.Write("<ul>" & vbCrLf) 'Display a list of sub folders. for each item in folder.SubFolders ListFolderContents(item) next 'Display a list of files. for each item in folder.Files 'url = MapURL(item.path) 'Response.Write("<li><a href=" & url & ">" & item.Name & "</a> - " _ Response.Write("<li><a href=" & Replace(item.path," ","%") & ">" & item.Name & "</a> - " _ & item.Name & "</a>" _ & "</li>" & vbCrLf) next Response.Write("</ul>" & vbCrLf) Response.Write("</ul>" & vbCrLf) end sub function MapURL(path) dim rootPath,url 'Convert a physical file path to a URL for hypertext links. rootPath = Server.MapPath("/") url = Right(path,Len(path) - Len(rootPath)) MapURL = Replace(url,"","/") end function 解决方法
你的代码有几个问题.
>首先,您根本不对输出的值进行编码.这是一个大错误.您缺少进入HREF属性的内容的URL编码,并且您错过了其他所有内容的HTML编码. 我完全重写了你的代码,以产生更正确的输出并尽可能快.您的问题的关键是PathEncode()函数,它将相对路径转换为正确编码的URL.其他事情应该是不言自明的: ListFolder "P:ATHTOTHEFOLDERONTHESERVER" ' -- Main Functions ---------------------------------------------------- Sub ListFolder(path) Dim fs,rootPath Set fs = CreateObject("Scripting.FileSystemObject") rootPath = Replace(path,Server.MapPath("/"),"") & "" ListFolderContents fs.GetFolder(path),PathEncode(rootPath) End Sub ' ---------------------------------------------------------------------- Sub ListFolderContents(folder,relativePath) Dim child Say "<ul>" Say "<li><div class=""folder"">" & h(folder.Name) & "</div>" For Each child In folder.SubFolders If Not IsHidden(child) Then ListFolderContents child,relativePath & PathEncode(child.Name) & "/" End If Next relativePath = h(relativePath) For Each child In folder.Files If Not IsHidden(child) Then Say "<li><a href=""" & relativePath & h(PathEncode(child.Name)) & """>" & h(child.Name) & "</a></li>" End If Next Say "</ul>" End Sub ' -- Helper Functions / Shorthands --------------------------------------- Sub Say(s) Response.Write s & vbNewLine End Sub Function h(s) h = Server.HTMLEncode(s) End Function Function PathEncode(s) ' this creates a more correct variant of what Server.URLEncode would do PathEncode = Replace(s,"/") PathEncode = Server.URLEncode(PathEncode) PathEncode = Replace(PathEncode,"+","%20") PathEncode = Replace(PathEncode,"%2F","/") PathEncode = Replace(PathEncode,"%2E",".") PathEncode = Replace(PathEncode,"%5F","_") End Function Function IsHidden(File) IsHidden = File.Attributes And 2 = 2 End Function 笔记 >使用< div class =“folder”>将CSS样式(即粗体等)应用于文件夹名称.>该函数不会输出隐藏文件或目录.> relativePath参数用于使工作负载尽可能低 – 当文件夹有1000个文件时,计算整个相对路径1000次是没有意义的.借助此参数,仅处理实际更改的部分.>拥有像Say()或h()这样的函数可以节省大量的输入,并使代码更加干净.>您应该阅读URL编码(以及HTML编码).好像你从未遇到过这些事情,如果你的任务是建立一个安全的网站,那就特别糟糕了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-3 – mvc3 OutputCache RemoveOutputCacheItem
- asp.net-mvc – 使用ASP.NET MVC和Razor的Knockout.js
- ASP.NET Web API为单个路由定制IHttpControllerSelector
- .net – 如何更改乌节纪录库
- asp.net – 如何关闭IIS中的预编译?
- 迁移WPF项目到.NET Core
- iis-6 – 如何防止IIS覆盖我在ASP.NET中设置的文化?
- asp.net-core – 如何根据ASP.NET Core中的解决方案配置运行
- ASP.NET WebForm的“页面生命周期”是什么?
- 如何在codenameone中使用ASP.Net wsdl web服务
- 以编程方式为SqlDataSource设置ASP.NET参数不适用
- asp.net-mvc – ASP.NET MVC的初学者在线资源是什
- asp.net – MVC 3,(razor)加载部分与验证
- asp.net-web-api – 首先使用ASP.NET Web API的E
- asp.net-mvc-4 – 用于Asp.net Web API的Ninject
- asp.net-mvc-3 – 禁用ASP.NET-MVC3中的unicode字
- asp.net-mvc – 企业库日志记录 – 从格式中删除
- asp.net-mvc – 从ASP.NET Web API返回一些字段
- asp.net-mvc – ASP.NET MVC Windows Azure组织身
- asp.net – 如何将IIS Developer Express切换到“