Dim sRoot As String = "c:\SERVER01"
Public Class MyFolder
Public MyFiles As FileInfo()
Public MyFolders As DirectoryInfo()
End Class
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
lblFolder.Text = sRoot
Dim MyFiles As MyFolder = GetFiles(sRoot)
LoadTreeFiles(sRoot, MyFiles, "", Nothing)
End If
End Sub
Public Function GetFiles(sRootFolder As String) As MyFolder
Dim MyDir As New DirectoryInfo(sRootFolder)
Dim cMyFolder As New MyFolder
cMyFolder.MyFolders = MyDir.GetDirectories("*.*", SearchOption.TopDirectoryOnly)
cMyFolder.MyFiles = MyDir.GetFiles("*.*", SearchOption.TopDirectoryOnly)
Return cMyFolder
End Function
Sub LoadTreeFiles(fRootL As String,
lParent As MyFolder,
sParentID As String,
tTreeNode As TreeNode)
' add folders if any
For Each sFolder As DirectoryInfo In lParent.MyFolders
Dim child As New TreeNode
child.Text = sFolder.Name
child.Value = sFolder.FullName
child.Expanded = False
child.PopulateOnDemand = True
child.ShowCheckBox = False
If sParentID = "" Then
TreeView1.Nodes.Add(child)
Else
tTreeNode.ChildNodes.Add(child)
End If
Next
' now any files
For Each sFile As FileInfo In lParent.MyFiles
Dim child As New TreeNode
child.Text = sFile.Name
child.Value = sFile.FullName
child.Expanded = False
child.ShowCheckBox = True
child.PopulateOnDemand = False
If sParentID = "" Then
TreeView1.Nodes.Add(child)
Else
tTreeNode.ChildNodes.Add(child)
End If
Next
End Sub
Protected Sub TreeView1_TreeNodeExpanded1(sender As Object, e As TreeNodeEventArgs) Handles TreeView1.TreeNodeExpanded
Dim child As TreeNode = e.Node
Dim dtChild As MyFolder = GetFiles(child.Value)
LoadTreeFiles(child.Value, dtChild, child.Text, child)
End Sub
public static class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
//Conflicting routes must be defined before friendlyurls are
routes.Add("Browse", new Route("Browse/{*path}", new GenericRouteHandler("~/Browse.aspx")));
var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings);
}
}
实施GenericRouteHandler:
public class GenericRouteHandler : IRouteHandler
{
public GenericRouteHandler(string virtualPath)
{
this.VirtualPath = virtualPath;
}
public string VirtualPath { get; private set; }
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var page = BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as IHttpHandler;
foreach (var urlParm in requestContext.RouteData.Values)
{
requestContext.HttpContext.Items[urlParm.Key] = urlParm.Value;
}
return page;
}
}
最后,我创建了Browse页面本身,在这里我可以通过以下方式访问请求的目录路径:
string path = HttpContext.Current.Items["path"] as string;
2条答案
按热度按时间2ekbmq321#
那么,关闭文件夹浏览,然后说提供基于Web的自己的UI不是更好吗?
我注意到上面的内容,因为这个VAST提高了安全性,允许无限制地定制UI。并说将允许限制文件夹和文件的基础上,用户的登录。
更好的是,您还可以使用其他文件夹然后服务器,但不必创建和Map虚拟文件夹从Web服务器到其他服务器。
这意味着,对于其他文件夹等,您不必更改Web服务器配置。
假设你把一个树视图控件放到网页上。
选择图像设置为“windows xp文件浏览”。
所以,现在我们有了这个标记:
因此,“浏览”文件夹的代码并不多,但您当然可以引入对文件类型的限制,并根据用户的登录设置文件夹(限制)。所以,说这段代码:(它甚至不是递归的,也不需要递归)。
现在网页显示:
所以,还不清楚你是否需要/想要一个自定义处理程序,但只需要用树视图控件构建某种UI,并按照上面的方法构建自己的文件浏览系统。由于我只加载每个文件夹“按需”,那么上面的速度是非常快的,即使是一个系统与一个大而深的文件夹层次结构。
上面有多个文件选择的复选框,但你可以点击一个文件下载。上面的设计允许你添加额外的UI选项,比如“选择所有这个文件夹”或者其他什么。
x9ybnkn62#
我自己找到了答案。对于任何有类似问题的发现者发布。
原来可以为路径
*/
注册一个handler:然后,服务器将对任何以“/”结尾的请求使用此处理程序,除了通过WeblogyUrls或有效配置的路由的现有页面,这意味着它将对服务器文件树中的任何目录使用此处理程序。然后创建一个名为DirectoryDirectory的新IHttpRequest:
这会将指向某个目录的请求重定向到mypage.com/Browse/[Request.Path]然后,我在
RouteConfig.cs
中注册了一个新路由:实施
GenericRouteHandler
:最后,我创建了Browse页面本身,在这里我可以通过以下方式访问请求的目录路径:
剩下的就是在Browse页面中手动创建视图、权限和行为。