Frage

Wir haben vor kurzem Amazon S3 in unserer Website implementiert, die uns veranlasst, die Art und Weise zu ändern, wie wir Bilder behandelt. Früher haben wir einen Controller /fotos.php nennen, der die Datei von der Festplatte lesen würde, einige Statistiken aufzunehmen, setzen Sie Header und zurück um den Inhalt der Datei als image / jpeg.

Es ging alles OK, bis S3. Fotos.php hat jetzt ein 302 auf die Ressource in Amazon umleiten und alles ist schön und arbeitet, aber man kann nicht ein Bild in Firefox speichern, weil es seinen Dateityp als HTM setzt. Ich fand diese Diskussion über die Angelegenheit, und es scheint, wie ein Bug in Firefox:

https://bugs.launchpad.net/ubuntu /+source/firefox-3.0/+bug/207670

Hier ist ein URL, das Problem aufweist (versuchen Sie das große Bild zu speichern):

http: // www .viajeros.com / fotos / el-gran-lago-de-atitlan-y-sus-volcanes / 132.968

Internet Explorer 6 zumindest versucht, es als untitled.bmp zu speichern.

Hier ist der Code-Snippet verwenden wir in fotos.php:

$archivo = $fotos->ObtenerPathFotoAmazon( $url, null );

if (empty($_GET['nocache'])) {
    header('HTTP/1.0 302 Found');
    header("Expires: ".gmdate("D, d M Y H:i:s", time()+315360000)." GMT");
    header("Cache-Control: max-age=315360000");
} else {
    header('HTTP/1.0 307 Temporary Redirect');
}

header('Location: ' . AWS_BUCKET_URL . $archivo);
die;

Sie wissen eine Lösung für das?

EDIT:. Wir verwenden Cloudfront als auch

War es hilfreich?

Lösung

versuchen, den Inhaltstyp des Bildes angeben, mit header('Content-Type: image/jpeg'); oder header('Content-Type: image/png');

vielleicht werden Sie Content-Disposition-Bindung verwenden, um PHP geben Sie den Content-Type (Standort verlassen die Aufgabe an den Web-Server)

lassen
$archivo = $fotos->ObtenerPathFotoAmazon( $url, null );

if (empty($_GET['nocache'])) {
   header('HTTP/1.0 302 Found');
   header("Expires: ".gmdate("D, d M Y H:i:s", time()+315360000)." GMT");
   header("Cache-Control: max-age=315360000");
} 

header('Content-Type: image/jpeg');
header("Content-Disposition: attachment; filename='$archivo'");
readfile(AWS_BUCKET_URL .$archivo);
die();

Andere Tipps

Es ist kein Fehler

S3 selbst nicht weiß, was Mimetyp, das Objekt, das Sie speichern ist. Wenn Sie PUT das Objekt in S3 Sie müssen auch Content-Type und Content-Disposition Header (und was sonst können Sie möchten). Wenn Sie dies tun, wird S3 mit den Header-Werte reagieren, wenn Sie oder jemand anderes, GET 's das Objekt

Da dieser Fehler nicht auf Firefox beschränkt ist (IE auch versucht, es als die falsche Art zu speichern, obwohl es zumindest realisiert, es ist ein Bild), würde ich vermuten, dass S3 den falschen Mime-Typen für die zurückkehrt Datei.

Wenn die Leute fragen diese auf anderen Foren ich darauf, sie in Richtung dieses Skript . Sie müssen nicht alle, es zu benutzen, aber es ist ein schöner Zeiger in der richtigen Richtung.

Ich schreibe wird nicht mehr als die anderen dieses gut genug beantwortet haben.

Ich lief in dieser Frage selbst einmal. Ich denke, dass die einzige wirkliche Abhilfe für sie (zu der Zeit) war so etwas wie „# .jpg“ an das Ende der URL anhängen. Das soll nicht Ihre Verarbeitung beeinflussen und FF zwingen, um den Download Typen jpg zu setzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top