Html href download file with a different name.

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • GonzaloJr
    New Member
    • Jan 2014
    • 7

    Html href download file with a different name.

    i have a directory with several files, each file with a encoded name, each letter/number in the file name means something, but the final user have to "learn" how to read the code to understand what is in the file and download the propper file, plese undestand me, the link to download the file could have the name decoded but what i need is to give the file to the user with the file name decoded so the final user have not to rename the file in a way he/she can understand it. is it possible to have a file named "abc.txt" and download it as "Actions Bonuses & Corrections.txt "? thanks for the help.
  • omerbutt
    Contributor
    • Nov 2006
    • 638

    #2
    hi gonzaloJr,
    see below code for example you can use the anchor tag to download the file by specifying in this way

    Code:
    <a href='download.php?f=124521883213321313.pdf&fn=new-file-name.pdf'>Click here to download</a>
    where the f is the original file name i.e in time stamp or any coded format and the fn is the new file name or the desired decoded name that you want , sve the following file and try this code

    FILENAME download.php
    Code:
    <?php
    # Sample call (browser will try to save with new file name):
    #    download.php?f=phptutorial.zip&fc=php123tutorial.zip
    ###############################################################
    
    // Allow direct file download (hotlinking)?
    // Empty - allow hotlinking
    // If set to nonempty value (Example: example.com) will only allow downloads when referrer contains this text
    define('ALLOWED_REFERRER', '');
    
    // Download folder, i.e. folder where you keep all files for download.
    // MUST end with slash (i.e. "/" )
    
    define('BASE_DIR','E:/xampp/htdocs/ews/vanguard/docs');
    
    // log downloads?  true/false
    define('LOG_DOWNLOADS',true);
    
    // log file name
    define('LOG_FILE','downloads.log');
    
    // Allowed extensions list in format 'extension' => 'mime type'
    // If myme type is set to empty string then script will try to detect mime type 
    // itself, which would only work if you have Mimetype or Fileinfo extensions
    // installed on server.
    $allowed_ext = array (
      // archives
      // documents
      'pdf' => 'application/pdf',
      'doc' => 'application/msword',
      'docx' => 'application/msword',
      'ppt' => 'application/msword',
      'pptx' => 'application/octet-stream',
      'pptx' => 'application/octet-stream',
      'wpd' => 'application/octet-stream',
      'xls' => 'application/octet-stream',
      'xlsx' => 'application/octet-stream'
    );
    
    
    
    ####################################################################
    ###  DO NOT CHANGE BELOW
    ####################################################################
    
    // If hotlinking not allowed then make hackers think there are some server problems
    if (ALLOWED_REFERRER !== ''
    && (!isset($_SERVER['HTTP_REFERER']) || strpos(strtoupper($_SERVER['HTTP_REFERER']),strtoupper(ALLOWED_REFERRER)) === false)
    ) {
      die("Internal server error. Please contact system administrator.");
    }
    
    // Make sure program execution doesn't time out
    // Set maximum script execution time in seconds (0 means no limit)
    set_time_limit(0);
    
    if (!isset($_GET['f']) || empty($_GET['f'])) {
      die("Please specify file name for download.");
    }
    
    // Get real file name.
    // Remove any path info to avoid hacking by adding relative path, etc.
    $fname = basename($_GET['f']);
    
    // Check if the file exists
    // Check in subfolders too
    function find_file ($dirname, $fname, &$file_path) {
      $dir = opendir($dirname);
    
      while ($file = readdir($dir)) {
        if (empty($file_path) && $file != '.' && $file != '..') {
          if (is_dir($dirname.'/'.$file)) {
            find_file($dirname.'/'.$file, $fname, $file_path);
          }
          else {
            if (file_exists($dirname.'/'.$fname)) {
              $file_path = $dirname.'/'.$fname;
              return;
            }
          }
        }
      }
    
    } // find_file
    
    // get full file path (including subfolders)
    $file_path = '';
    find_file(BASE_DIR, $fname, $file_path);
    
    if (!is_file($file_path)) {
      die("File does not exist. Make sure you specified correct file name."); 
    }
    
    // file size in bytes
    $fsize = filesize($file_path); 
    
    // file extension
    $fext = strtolower(substr(strrchr($fname,"."),1));
    
    // check if allowed extension
    if (!array_key_exists($fext, $allowed_ext)) {
      die("Not allowed file type."); 
    }
    
    // get mime type
    if ($allowed_ext[$fext] == '') {
      $mtype = '';
      // mime type is not set, get from server settings
      if (function_exists('mime_content_type')) {
        $mtype = mime_content_type($file_path);
      }
      else if (function_exists('finfo_file')) {
        $finfo = finfo_open(FILEINFO_MIME); // return mime type
        $mtype = finfo_file($finfo, $file_path);
        finfo_close($finfo);  
      }
      if ($mtype == '') {
        $mtype = "application/force-download";
      }
    }
    else {
      // get mime type defined by admin
      $mtype = $allowed_ext[$fext];
    }
    
    	// Browser will try to save file with this filename, regardless original filename.
    	// You can override it if needed.
    	
    	if (!isset($_GET['fc']) || empty($_GET['fc'])) {
    	  $asfname = $fname;
    	}
    	else {
    	  // remove some bad chars
    	  $asfname = str_replace(array('"',"'",'\\','/'), '', $_GET['fc']);
    	  if ($asfname === '') $asfname = 'NoName';
    	}
    
    	// set headers
    	header("Pragma: public");
    	header("Expires: 0");
    	header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    	header("Cache-Control: public");
    	header("Content-Description: File Transfer");
    	header("Content-Type: $mtype");
    	header("Content-Disposition: attachment; filename=\"$asfname\"");
    	header("Content-Transfer-Encoding: binary");
    	header("Content-Length: " . $fsize);
    
    // download
    // @readfile($file_path);
    $file = @fopen($file_path,"rb");
    if ($file) {
    
      while(!feof($file)) {
        print(fread($file, 1024*8));
        flush();
        if (connection_status()!=0) {
          @fclose($file);
          die();
        }
      }
      @fclose($file);
    }
    
    //if (!LOG_DOWNLOADS) die();
    
    
    $f = @fopen(LOG_FILE, 'a+');
    if ($f) {
      @fputs($f, date("m.d.Y g:ia")."  ".$_SERVER['REMOTE_ADDR']."  ".$fname."\n");
      @fclose($f);
    }
    ?>
    regards,
    Omer aslam

    Comment

    Working...