Zurück Bild vom symfony2 Controller
Ich würde gerne wissen, wie kann ich wieder ein Bild von der Steuerung ohne eine Vorlage.
Ich möchte es verwenden für die pixel-tracking in einem newsletter.
Starte ich mit diesem code
$image = "1px.png";
$file = readfile("/path/to/my/image/1px.png");
$headers = array(
'Content-Type' => 'image/png',
'Content-Disposition' => 'inline; filename="'.$file.'"');
return new Response($image, 200, $headers);
Aber auf den navigator habe ich einen kaputten link (Datei nicht gefunden...)
- Gerade gesehen, die Nachricht, aber dies würde helfen. Herunterladen einer Datei mit symfony
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jetzt kehren Sie den Dateinamen als Antwort Körper und schreiben der Datei-Inhalt der filename-Eigenschaft des Content-Disposition.
werden sollte:
... und ...
sein sollte ...
Recht?
Weiter nehmen Sie einen Blick auf diese Frage.
Entsprechend der Symfony-Docs, wenn die Bereitstellung von Dateien könnte man eine BinaryFileResponse:
Diese BinaryFileResponse automatisch verarbeitet HTTP-request-Header und erspart Ihnen mit
readfile()
oder anderen Datei-Funktionen.Dies funktioniert gut für mich.
Ausserdem musste ich ändern:
zu diesem:
Schien wie readfile hallte Inhalt, wie es Lesen, es zwingt Header ausgeben früh und negiert die Zwangs-Content-Type-header.
Schnell anwser
file_get_contents ist eine schlechte Idee. Lesen eine große Liste von Bildern via file_get_contents tötete meinen kleinen server. Ich musste eine andere Lösung finden, und das gelingt jetzt perfekt und sehr schnell für mich.
Der Schlüssel ist die Verwendung von readfile($sFileName) anstelle von file_get_contents. Die Symfony-Stream-Reaktion in der Lage ist, eine callback-Funktion, die ausgeführt werden, während das senden ($oResponse->senden()). So ist dies ein guter Ort, um zu readfile().
Als ein wenig profitieren, schrieb ich eine Art von caching.