在与该主题相关的许多帖子中,我终于想出了这个版本的“强制下载”代码:
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 Image Viewer 来说似乎已经足够了,它会报告损坏的文件错误。
另一方面,同样下载的 jpg 在 Adobe Photoshop 中完美打开(也许不那么严格?)
想法?任何人?
提前致谢。
Z
更新:使用此代码下载的 Zip 文件只能使用 WinRAR 或 WinZIP 打开,Windows 资源管理器 Zip 提取显示损坏文件错误消息。
UPDATE2:好的,我现在知道是 BOM 问题。现在,我怎样才能从 file_get_content 结果中摆脱那个讨厌的“EF BB BF”?