Древовидный файл карты на веб-адрес, а не адрес каталога - PullRequest
0 голосов
/ 12 июля 2009

Я пытаюсь настроить страницу, которая позволит пользователю просматривать каталог файлов на веб-сервере.

Цель состоит в том, чтобы позволить пользователям удалять файлы в пределах заданной структуры каталогов, а код будет создавать древовидное представление на основе каталога.

При настройке URL-адреса навигации по узлам он сопоставляется с C: \ Staging \ Files, который не работает в Интернете. Мне нужно сопоставить с http://webaddress/staging/files и т. Д.

Вот код нарушения

    Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load


    If Not Page.IsPostBack Then
        '
        Dim rootDir As New DirectoryInfo("C:\Staging\")
        ' Enter the RecurseNodes function to recursively walk the directory tree. 
        Dim RootNode As TreeNode = RecurseNodes(rootDir)
        ' Add this Node hierarchy to the TreeNode control. 
        Treeview1.Nodes.Add(RootNode)
    End If
End Sub

Private Function RecurseNodes(ByVal thisDir As DirectoryInfo) As TreeNode


    Dim thisDirNode As New TreeNode(thisDir.Name, Nothing)
    ' Get all the subdirectories in this Directory. 
    Dim subDirs As DirectoryInfo() = thisDir.GetDirectories()
    For Each subDir As DirectoryInfo In subDirs
        thisDirNode.ChildNodes.Add(RecurseNodes(subDir))
    Next
    ' Now get the files in this Directory. 
    Dim files As FileInfo() = thisDir.GetFiles()
    For Each file As FileInfo In files
        Dim thisFileNode As New TreeNode(file.Name, Nothing)
        **thisFileNode.NavigateUrl = file.FullName**
        thisDirNode.ChildNodes.Add(thisFileNode)
    Next
    Return thisDirNode
End Function

1 Ответ

1 голос
/ 12 июля 2009

Я думаю, что вы должны принять обратный подход. Вместо того, чтобы получать содержимое физического пути на диске, попробуйте использовать Server.MapPath для захвата содержимого виртуального пути, объедините его с базовым URL:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        Dim RootNode As TreeNode = RecurseNodes("~/files")
        TreeView1.Nodes.Add(RootNode)
    End If
End Sub

Private Overloads Function RecurseNodes(ByVal virtualPath As String) As TreeNode
    If Not VirtualPathUtility.IsAbsolute(virtualPath) Then virtualPath = VirtualPathUtility.ToAbsolute(virtualPath)
    virtualPath = VirtualPathUtility.RemoveTrailingSlash(virtualPath)
    Dim baseUrl As String = Request.Url.GetLeftPart(UriPartial.Authority) + virtualPath
    Return RecurseNodes(New DirectoryInfo(Server.MapPath(virtualPath)), baseUrl)
End Function

Private Overloads Function RecurseNodes(ByVal thisDir As DirectoryInfo, ByVal baseUrl As String) As TreeNode
    Dim thisDirNode As New TreeNode(thisDir.Name, Nothing)
    Dim subDirs As DirectoryInfo() = thisDir.GetDirectories()
    For Each subDir As DirectoryInfo In subDirs
        thisDirNode.ChildNodes.Add(RecurseNodes(subDir, baseUrl + subDir.Name + "/"))
    Next
    Dim files As FileInfo() = thisDir.GetFiles()
    For Each file As FileInfo In files
        Dim thisFileNode As New TreeNode(file.Name, Nothing)
        thisFileNode.NavigateUrl = baseUrl + file.Name
        thisDirNode.ChildNodes.Add(thisFileNode)
    Next
    Return thisDirNode
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...