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 functionPublic 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 NextEnd 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 FunctionEnd ClassI 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.
