2015-11-20 53 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

感謝您的更新。有用 –