2009-07-11 1 views
0

J'essaie de mettre en place une page qui permettra à l'utilisateur de parcourir un répertoire de fichiers sur le serveur Web.Treeview carte fichier à l'adresse Web plutôt que l'adresse du répertoire

L'objectif est de permettre aux utilisateurs de déposer des fichiers dans une structure de répertoire donnée et le code créera l'arborescence basée sur le répertoire.

Lors de la définition de l'URL de navigation des nœuds, elle est mappée sur C: \ Staging \ Files, qui ne fonctionne pas correctement sur le Web. Il me faudrait mapper http://webaddress/staging/files etc

Voici le code incriminé

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 

Répondre

1

Je pense que vous devriez prendre l'approche inverse. Plutôt que d'obtenir le contenu d'un chemin physique sur le disque, essayez d'utiliser Server.MapPath pour saisir le contenu d'un chemin virtuel combiner avec une URL de base:

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 
+0

Pourriez-vous me donner un exemple de la façon dont cela fonctionnerait? –

Questions connexes