以下一些有关我终于与此版本的“强制下载”码上来主题的很多帖子的:
public function downloadAction(Request $request){
$filename= 'test.jpg';
$response = new Response();
$response->headers->set('Content-Type','image/jpg');
$response->headers->set('Content-Disposition', 'attachment; filename="' . basename($filename) . '"');
$response->sendHeaders();
$response->setContent(file_get_contents($filename));
return $response;
}
现在,这个工作正常zip文件(显然使用正确的内容类型),但对于JPG不同的东西发生。 当使用HexCompare检查原件及下载的JPG我发现下载的版本增加了“EF BB BF”的文件的开头。 这似乎是不够的Windows图像查看器,从而结束报告文件损坏错误。
在另一方面,相同的下载JPG完全打开,在Adobe Photoshop(不太严格吧?)
想法? 任何人?
提前致谢。
同
更新:使用此代码下载的ZIP文件只能用WinRAR或WinZIP的打开,Windows资源管理器邮编摘录显示了损坏的文件的错误消息。
UPDATE2:OK,我知道现在是一个BOM问题。 现在,我怎样才能摆脱讨厌的“EF BB BF”从file_get_content结果?
请尝试以下的建议在这里
// Set headers
$response->headers->set('Cache-Control', 'private');
$response->headers->set('Content-type', mime_content_type($filename));
$response->headers->set('Content-Disposition', 'attachment; filename="' . basename($filename) . '"');
$response->headers->set('Content-length', filesize($filename));
// Send headers before outputting anything
$response->sendHeaders();
$response->setContent(readfile($filename));
如果您使用的是与mod_xsendfile apache的,请尝试:
return new Response('', 200, array(
'X-Sendfile' => $filename,
'Content-type' => 'application/octect-stream',
'Content-Disposition' => sprintf('attachment; filename="%s"', $filename)),
// ...
));
如果您使用的nginx的X-加速读取这里 。 和使用
return new Response('', 200, array(
'X-Accel-Redirect' => $filename,
'Content-type' => 'application/octect-stream',
'Content-Disposition' => sprintf('attachment; filename="%s"', $filename)),
// ...
));
获得nginx的额外选项更多的控制是...
// ...
'X-Accel-Limit-Rate' => '1024',
'X-Accel-Buffering' => 'yes', // yes|no
'X-Accel-Charset' => 'utf-8',
// ...