The virtual and physical paths are not shown in the FileExplorer. I cannot see any folders when running my solution. It is designed to allow clients to select a folder path from their local filesystem. Additionally, it needs to allow users to select a folder path from a initialpath on the server. I was able to create a custom content provider for both task after reviewing and modifying code found in this link, http://www.telerik.com/support/kb/aspnet-ajax/fileexplorer/details/use-radfileexplorer-with-physical-and-shared-folder-s-paths , to no avail.
From stepping through code during debugging, I am getting the paths from the MappingFile.mapping xml file and loading them into the initialPath and viewPath properties.
' Get physical and virtual path mappings to initialize the FileExplorer upon page load. This is a helper function
' of the ConfigureFileExplorer function
Public Sub GetPhysicalVirtualPath()
Dim configFile As New XmlDocument()
Dim physicalPathToConfigFile As String = Context.Server.MapPath(Me.pathToConfigFile)
configFile.Load(physicalPathToConfigFile)
' Load the configuration file
Dim rootElement As XmlElement = configFile.DocumentElement
Dim handlerPathSection As XmlNode = rootElement.GetElementsByTagName("genericHandlerPath")(0)
' get all mappings ;
Me._itemHandlerPath = handlerPathSection.InnerText
Me.mappedPathsInConfigFile = New Dictionary(Of String, String)()
Dim mappingsSection As XmlNode = rootElement.GetElementsByTagName("Mappings")(0)
' get all mappings ;
For Each mapping As XmlNode In mappingsSection.ChildNodes
' Get the appropriately categorized path, which is the InternalShare for ReceiveInternal and SendInternal operations
Dim virtualPathAsNode As XmlNode = mapping.SelectSingleNode("VirtualPath")
Dim physicalPathAsNode As XmlNode = mapping.SelectSingleNode("PhysicalPath")
' If neither string is empty, then
If Not String.IsNullOrEmpty(virtualPathAsNode.InnerText) And Not String.IsNullOrEmpty(physicalPathAsNode.InnerText) Then
' Add all mappings to the list
Me.mappedPathsInConfigFile.Add(PathHelper.RemoveEndingSlash(virtualPathAsNode.InnerText, "/"c), PathHelper.RemoveEndingSlash(physicalPathAsNode.InnerText, "\"c))
End If
Next
End Sub
The server or client directory should be shown depending on the requested action (tab's ID) received from a hidden field on the client app. Please see the following:
Public Sub GetPhysicalVirtualPath()
Dim configFile As New XmlDocument()
Dim physicalPathToConfigFile As String = Context.Server.MapPath(Me.pathToConfigFile)
configFile.Load(physicalPathToConfigFile)
' Load the configuration file
Dim rootElement As XmlElement = configFile.DocumentElement
Dim handlerPathSection As XmlNode = rootElement.GetElementsByTagName("genericHandlerPath")(0)
' get all mappings ;
Me._itemHandlerPath = handlerPathSection.InnerText
Me.mappedPathsInConfigFile = New Dictionary(Of String, String)()
Dim mappingsSection As XmlNode = rootElement.GetElementsByTagName("Mappings")(0)
' get all mappings ;
For Each mapping As XmlNode In mappingsSection.ChildNodes
' Get the appropriately categorized path, which is the InternalShare for ReceiveInternal and SendInternal operations
Dim virtualPathAsNode As XmlNode = mapping.SelectSingleNode("VirtualPath")
Dim physicalPathAsNode As XmlNode = mapping.SelectSingleNode("PhysicalPath")
' 2/20/14 - If neither string is empty, then
If Not String.IsNullOrEmpty(virtualPathAsNode.InnerText) And Not String.IsNullOrEmpty(physicalPathAsNode.InnerText) Then
' Add all mappings to the list
Me.mappedPathsInConfigFile.Add(PathHelper.RemoveEndingSlash(virtualPathAsNode.InnerText, "/"c), PathHelper.RemoveEndingSlash(physicalPathAsNode.InnerText, "\"c))
End If
Next
End Sub
Can you clarify how the CustomFileSystemProvider.vb file should be used? I used the example provided in the link above. However, I removed the file operations (move, delete, etc.) since I only need to select folders from the directory to build a path to return to the client that will be used for processing needs. Then I added the following extended provider to the end of my page's codepage:
Public Class ExtendedFileProviderInternal
Inherits Telerik.Web.UI.Widgets.FileSystemContentProvider
'constructor must be present when overriding a base content provider class
'you can leave it empty
Public Sub New(ByVal context As HttpContext, ByVal searchPatterns As String(), ByVal viewPaths As String(), ByVal uploadPaths As String(), ByVal deletePaths As String(), ByVal selectedUrl As String, _
ByVal selectedItemTag As String)
MyBase.New(context, searchPatterns, viewPaths, uploadPaths, deletePaths, selectedUrl, selectedItemTag)
End Sub
Public Overloads Overrides Function ResolveDirectory(ByVal path As String) As Telerik.Web.UI.Widgets.DirectoryItem
'get the directory information
Dim baseDirectory As Telerik.Web.UI.Widgets.DirectoryItem = MyBase.ResolveDirectory(path)
'remove files that we do not want to see
Dim files As New System.Collections.Generic.List(Of Telerik.Web.UI.Widgets.FileItem)()
Dim UnauthextWebConfig As String = System.Configuration.ConfigurationManager.AppSettings("UnAuthorizedFileExtensions")
Dim INVALID_EXTENSIONS As String() = FileExts()
For Each file As Telerik.Web.UI.Widgets.FileItem In baseDirectory.Files
' Get the file extension of the current file, the last element in the sequence
Dim ext As String = file.Name.Split(New Char() {"."c}).Last
' For the Internal version of the file upload control, use this code
' along with the exclusion list in the webconfig to prevent script injection from .sql, .cs, .bat, .exe., .cmd, etc.
If Not INVALID_EXTENSIONS.Contains(ext.ToLower()) Then
files.Add(file)
End If
Next
Dim newDirectory As New Telerik.Web.UI.Widgets.DirectoryItem(baseDirectory.Name, baseDirectory.Location, baseDirectory.FullPath, baseDirectory.Tag, baseDirectory.Permissions, files.ToArray(), _
baseDirectory.Directories)
'return the updated directory information
Return newDirectory
End Function
' This function gets the custom file extension exclusion list from the web.config/ApplicationSettings set by the app admins
Function FileExts() As String()
Dim extWebConfig As String = System.Configuration.ConfigurationManager.AppSettings("AllowedFileExtensions")
Dim exts As String() = extWebConfig.Split(New Char() {","c})
' If the count of extensions is not zero, then
If (exts.Count = 0) Then
exts(0) = ("undefined")
End If
' Return the array
Return exts
End Function
End Class
I did not make any changes to the PathHelper.vb file. I only kept the New(), GetFileContent(), and CheckWritePermission() functions of the FileSystem.vb file. The CustomFileSystemProvider.vb, FileSystem.vb, MappingFile.mapping, and PathHelper.vb files are kept in my App_Data folder in Visual Studio 2010.
I am running/debugging the web application locally with IIS 7 on Windows 7 OS. The application must access the shared and local directories. Do I need to create virtual directories in IIS for the server filesystem to show in the FileExplorer? Additionally, how can I get the FileExplorer to show the user's local File system? What are your suggestions? Thanks.