この件に関連する多くの投稿のいくつかに従って、最終的にこのバージョンの「強制ダウンロード」コードを思いつきました。
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 とダウンロードした JPG の両方をチェックすると、ダウンロードしたバージョンではファイルの先頭に「EF BB BF」が追加されていることがわかりました。これは、破損したファイル エラーを報告する Windows イメージ ビューアーには十分なようです。
一方、ダウンロードした同じ jpg は、Adobe Photoshop で完全に開きます (あまり厳密ではないのでしょうか?)。
アイデア?誰でも?
前もって感謝します。
Z
更新: このコードを使用してダウンロードした Zip ファイルは、WinRAR または WinZIP でのみ開くことができます。Windows エクスプローラーの Zip 抽出では、破損したファイル エラー メッセージが表示されます。
UPDATE2: OK、BOM の問題であることはわかっています。では、file_get_content の結果から厄介な「EF BB BF」を取り除くにはどうすればよいでしょうか。