3

我的网页上有一个链接,可以下载我在服务器上生成的 .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 文件中。

任何想法为什么会发生?

4

3 回答 3

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 或空白的控制器操作渲染视图脚本。

于 2012-06-08T17:12:12.667 回答
-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");
于 2012-06-08T09:29:46.880 回答
-4

试试这个:

header("Content-type: application/octet-stream");
header("Content-disposition:attachment; filename=inventoryData.csv");
于 2012-06-08T09:24:43.637 回答