This project is not covered by Drupal’s security advisory policy.


Upload files into a private directory. Enhances the core upload module's functionality to support both public and private uploads at the same time.

This module adds a "private" checkbox to the normal upload form. Files marked private will go to a separate directory. Access to files in this directory are controlled as if the entire site had private downloads, which is to say the user must have "view uploaded files" permission, and permission to view the node that the file is attached to.

The Drupal 6 version is now available. Drupal 6 allows the same file to be attached to multiple nodes, and entirely removes the node-level access control for files. This module restores node-level access control, using the rule that a user can see a file marked private, if-and-only-if they have view access to at least one of the nodes that the file is attached to.

Migrating private files from D5 to D6 should happen automatically (fingers crossed).

The big problem with core file handling is that there can only be one files
directory, and the download method is either public or private for ALL
files. If it is set to private all files are forced to go through a
full drupal bootstrap, which makes pages with multiple images unusabily

This module addresses these problems:
* It creates a secure subdirectory inside of the standard, public files directory (which can be set at admin/settings/private_upload).
* It warns you if files in the private directory are accessable.
* It offers to place a .htaccess file in that directory that will prevent files from being directly accessed on Apache webservers.
* It proveds a per-file checkbox for specifying a particular file as public or private.
* It allows you to set the default method to public or private.
* It only allows access to files to users who have access to the node it is attached to.
* Is also includes tools to help you migrate your existing file over to this system, and to audit your files to make sure they are in sync with the database.

* Conflicts with Upload Path:
* Conflicts with Upload Image:
* Does not add private checkbox to Comment Upload:

The Drupal 6 port was sponsored by Initiatives of Change (

Project information