在 Codeigniter 中强制下载文件时如何选择保存下载文件的位置?
How to Choose the location to save the download files when forcing file download in Codeigniter?
现在,CSV 文件导出到 reports 文件夹中。相反,我希望浏览器询问将文件导出到哪里。这样我就可以将文件导出到客户端计算机的所需位置,并避免将这些文件存储在服务器中(即)reports 文件夹。
$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);
据我所知,您只是在创建要动态下载的文件内容...您现在要做的是强制浏览器将文件下载到客户端选择的部分,然后可能会删除临时文件如果您不想将其存储在服务器上,请在之后创建文件...在创建文件或确定其存在后添加下面的代码...类似于
$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;
}
应该这样做。
现在,CSV 文件导出到 reports 文件夹中。相反,我希望浏览器询问将文件导出到哪里。这样我就可以将文件导出到客户端计算机的所需位置,并避免将这些文件存储在服务器中(即)reports 文件夹。
$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);
据我所知,您只是在创建要动态下载的文件内容...您现在要做的是强制浏览器将文件下载到客户端选择的部分,然后可能会删除临时文件如果您不想将其存储在服务器上,请在之后创建文件...在创建文件或确定其存在后添加下面的代码...类似于
$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;
}
应该这样做。