我正在使用流来下载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报告的开头得到这两个空行。
请注意,内容的开头没有空白区域。
任何想法?为什么会这样?
答案 0 :(得分:1)
请注意,流式响应实际上并不真正为客户端提供流上下文。它只是buffers the stream internally并一次性发出响应。
话虽这么说,我创建了一个控制器插件,用于从文件路径发送附件或直接发送到变量的二进制数据。它位于我的常见Soflomo\Common库中。我没有遇到您描述的问题,我使用some more headers than you do。
告诉我这段代码是否适合你。其中一个区别是您使用原始文件的大小作为响应的大小。我不确定,因为这可能会导致对缓存的流式响应漠不关心。尝试抓取内容并对此内容进行strlen()
。