我的网页上有一个链接,用于下载我在服务器上生成的.CSV文件。下载代码如下:
//open/save dialog box
header('Content-Disposition: attachment; filename="inventoryData.csv"');
//content type
header('Content-type: application/excel');
//read from server and write to buffer
readfile('spreadsheet/inventory.csv');
当我在服务器上打开文件时,它看起来很好。但是,当我通过对话框下载文件时,它会将网页的HTML代码预先挂起到.csv文件。
为什么会发生这种想法?
答案 0 :(得分:4)
如果此代码位于控制器操作中,我认为这是因为您使用的是ZF,那么您需要禁用布局和视图渲染器,因为它将尝试渲染视图。
尝试:
public function downloadAction()
{
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
//...
//open/save dialog box
header('Content-Disposition: attachment; filename="inventoryData.csv"');
//content type
header('Content-type: application/excel');
//read from server and write to buffer
readfile('spreadsheet/inventory.csv');
}
$this->_helper->layout()->disableLayout();
阻止您的布局脚本呈现(假设您使用布局),$this->_helper->viewRenderer->setNoRender(true);
告诉视图渲染器不呈现可能包含某些HTML或空格的控制器操作的视图脚本。
答案 1 :(得分:-3)
这应该可以解决问题
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"inventoryData.csv\";" );
header("Content-Transfer-Encoding: binary");
答案 2 :(得分:-4)
试试这个:
header("Content-type: application/octet-stream");
header("Content-disposition:attachment; filename=inventoryData.csv");