Enforce file download link in Drupal 7

Define the route

  $items['the_file/download/%/%'] = array(
    'page callback' => '_file_download',
    'page arguments' => array(2, 3),
    'access callback' => 'user_access',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

Menu callback

function _file_download($file_directory, $file_name) {
  $file_name = urldecode($file_name) . '.pdf';
  $file_directory = urldecode($file_directory);
  header("Cache-Control: public");
  header("Content-Type: application/octet-stream");
  header("Cache-Control: no-store, no-cache, must-revalidate");
  header("Cache-Control: post-check=0, pre-check=0");
  header('Content-Disposition: attachment; filename="' . $file_name . '";');
  header("Content-Transfer-Encoding: binary");
  readfile($file_directory . '/' . $file_name);
  drupal_exit();
}

 

********************************** ************************* ************************ **************** ****************** *********** ************** ************* ************ *************