My default download method is public, but I need save some file on private folder, I am doing this:

$file = file_save_data($handle, 'private://example.zip', FILE_EXISTS_REPLACE);

Now when I try show to download it:

$file = file_load($file_fid);
$url = file_create_url($file->uri);

$output['download'] = [
  '#type' => 'markup',
  '#markup' => l(t('Download'), $url),

return $output;

If I do click on the url, I get:

Access denied. You are not authorized to access this page.

I am superadmin (uid = 1). How I can management those files for me and for others users?

  • Private files are not meant to be used like that. Check your docs
    – sareed
    Aug 28, 2015 at 16:58

1 Answer 1


For bypass Drupal permission, you can implements hook_file_download():

 * Implements hook_file_download().
function mymodule_file_download($uri) {
  if (someCondition()) {
    if (!user_access('some permissions')) {
      // Access to the file is denied.
      return -1;
    else {
      return array('Content-Type' => file_get_mimetype($uri));

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.