DNN Folders and Folder Providers

Overview

 

DNN utilizes folders to store any assets that are uploaded to the Portal. Knowing how they work is instrumental in troubleshooting any issues regarding site assets and the folders that hold them.

This article explains what a folder provider is, what types of folders are utilized in DNN, and how to make changes to these folders via the UI (User Interface) and with SQL. 

 


 

What Is a Folder Provider?

 

Simply put, a Provider is a design pattern often used in .NET applications. The Provider Model can probably be best explained, in-depth, via the MSDN (Microsoft Developer Network).

To simplify this explanation and tie it more to DNN, Providers can be broken down into two basic types:

  • Abstract: This is something exposed as part of the DotNetNuke Core API.
    • Example: Data Provider
  • Concrete: A specific implementation of the abstract API.
    • Example: SQL Data Provider

 

The FolderProvider consists of two APIs that work with files and folders (FileManager and FolderManager). This new Provider allows the application to work with different storage locations. By default, there are three storage locations:

  • Insecure filesystem (Standard Folder Provider)
  • Secure filesystem (Secure Folder Provider) 
  • Secure database (Database Folder Provider)

 

Evoq Basic versions also include a couple of Cloud Folder Providers, specifically Amazon S3 and Windows Azure, allowing users to store files in the Cloud, with all the benefits that it implies.

 

Back to top


 

What Are the Different Types of Folders Used in DNN?

 

Standard Folder

 

The standard file system stores the file within the filesystem of the DotNetNuke application.

  • This is the default and most commonly used folder type as the majority of files in a system are available to all users (e.g., css/js/images).

 

Secure Folder

 

When a user creates a folder as a secure folder, DotNetNuke will append a ".resources" extension to any files within that folder.

The ".resources" extension is mapped to the 404-handler automatically by asp.net, which means that a request to that file will be ignored (i.e., if a user knew or could guess the URL, a request for "www.mysite.com/portals/0/wages.xls" would serve up that file. However, a request for "www.mysite.com/portals/0/wages.xls.resources" would be denied).

  • This is an excellent way to protect files against anonymous downloads, and also has minimal overhead as the only additional work DotNetNuke needs to do is append the ".resources" extension and know to ignore it when returning lists of files for this folder type.
  • Files in these types of folders are only accessible via linkclick.aspx links, which will allow DotNetNuke to verify permissions before deciding if the request should serve the file.

 

Database Folder

 

This option is similar to the secure filesystem, except that the files are stored in the database.

  • While this is as effective as a secure filesystem (and in some cases useful as it does not require synchronization of the files in a web farm), reading and writing to a database has more overhead than working with a filesystem.
  • Also, installs typically have much less database space than filesystem space, so care should be taken when selecting this choice.

 

 

UI (User Interface) view of the Persona Bar Assets when creating a new folder.

DNN_Folders.png

  • Name: Define the name of the folder.
  • Type: Set the folder type.

 

Keep in mind that you are not able to change the folder type after you have created the folder through the UI, please make sure you are selecting the correct folder type before creating it.

 

Back to top


 

Making Changes Using SQL

 

If you would like to make changes via the backend with SQL, you will need to look at the following two tables:

  • Folders
  • FolderMappings

 

  1. Look at the FolderMappings table and filter it by the specific Portal. Then choose a mapping name of either Standard, Secure, or Database

    SELECT * FROM FolderMappings WHERE PortalID = # AND MappingName = ‘’

    Make a note of the FolderMappingID

  1. Locate the FolderID by using a SELECT statement based on the folder path (e.g., Images/test).

    SELECT * FROM Folders WHERE FolderPath = ‘’

  2. Using the FolderMappingID and the FolderID, run an UPDATE statement on the specific folder in the Folders table.

    UPDATE Folders SET FolderMappingID = # WHERE FolderID = #

 

Back to top


 

Additional Information

 

 

Back to top

Comments

0 comments

Please sign in to leave a comment.