2015-11-20 31 views
-1

现在,CSV文件导出为报告文件夹。相反,我希望浏览器询问在哪里导出文件。这样我就可以将文件导出到客户机所需的位置,并避免将这些文件存储在服务器(即报告文件夹中)。如何在强制在Codeigniter中下载文件时选择保存下载文件的位置?

$this->load->dbutil();  
$this->load->helper('file'); 
$this->load->helper('download'); 

$selProducts= $this->db->query("SELECT * FROM tablename"); 
$data= $this->dbutil->csv_from_result($selProducts); 
$randomidgenerated = "reports/".date('Y-m-d').".csv"; 

if(file_exists(FCPATH.$randomidgenerated)){ 
     $randomidgenerated = "reports/".date('Y-m-d')."_".random_string('alnum', 3).".csv"; 
    } 

if (! write_file($randomidgenerated, $data)) 
{ 
    echo 'Unable to write the file';   
}  

$data = file_get_contents($randomidgenerated); 
force_download($randomidgenerated, $data, TRUE); 

回答

1

从我所看到的你是刚刚创建的文件的内容进行动态下载...你有什么现在要做的就是强制浏览器下载文件到客户选择的一部分,那么可能删除临时文件后,如果您不希望将其存储在服务器上...添加下面你已经创建了其存在的文件或确认刚过代码...像

$file = FCPATH.$randomidgenerated;   
if(file_exists($file)){ 
       header('Content-Description: File Transfer'); 
       header('Content-Type: text/csv'); 
       header('Content-Disposition: attachment; filename='.basename($file)); 
       header('Content-Transfer-Encoding: binary'); 
       header('Expires: 0'); 
       header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
       header('Pragma: public'); 
       header('Content-Length: ' . filesize($file)); 
       ob_clean(); 
       flush(); 
       readfile($file); 

       exit; 
} 

应该这样做。

+0

感谢您的更新。有用 –