ZF2 - 下载xls在下载的工作表中显示两个空行

时间:2014-01-31 09:04:20

标签: excel download zend-framework2

我正在使用流来下载excel文件。请找到以下代码

 $response = new \Zend\Http\Response\Stream();
 $response->setStream(fopen($myfile, 'r'));
 $response->setStatusCode(200);

 $headers = new \Zend\Http\Headers();
 $headers->addHeaderLine("Content-Type: application/vnd.ms-excel; charset=UTF-8")
        ->addHeaderLine('Content-Disposition', 'attachment; filename=my.xls')
        ->addHeaderLine( "Content-Transfer-Encoding: binary" )
        ->addHeaderLine('Content-Length', filesize($myfile));
 $response->setHeaders($headers);

生成的文件是正确的但是当我强制用户下载相同的文件时,下载的excel文件中会有两个空行。我做了一些研究,并认为可能是它的http版本和标题行,但我认为这不是因为如果我尝试不这样做,我会在excel报告的开头得到这两个空行。

请注意,内容的开头没有空白区域。

任何想法?为什么会这样?

1 个答案:

答案 0 :(得分:1)

请注意,流式响应实际上并不真正为客户端提供流上下文。它只是buffers the stream internally并一次性发出响应。

话虽这么说,我创建了一个控制器插件,用于从文件路径发送附件或直接发送到变量的二进制数据。它位于我的常见Soflomo\Common库中。我没有遇到您描述的问题,我使用some more headers than you do

告诉我这段代码是否适合你。其中一个区别是您使用原始文件的大小作为响应的大小。我不确定,因为这可能会导致对缓存的流式响应漠不关心。尝试抓取内容并对此内容进行strlen()