Domanda

Abbiamo recentemente implementato Amazon S3 nel nostro sito, che ci ha portato a cambiare il modo in cui abbiamo gestito le immagini. Abbiamo usato per chiamare un /fotos.php controller che avrebbe letto il file dal disco, registrare alcune statistiche, impostare le intestazioni e restituire il contenuto del file come image / jpeg.

Tutto è andato OK fino S3. Fotos.php ora fa un reindirizzamento 302 alla risorsa in Amazzonia e tutto è bello e di lavoro, ma non si può salvare un'immagine in Firefox perché stabilisce il tipo di file come htm. Ho trovato questo la discussione sulla questione, e sembra come un insetto in Firefox:

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

Ecco un URL espone il problema (cercare di salvare l'immagine grande):

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

Internet Explorer 6, almeno cerca di salvarlo come Untitled.BMP.

Ecco il frammento di codice che utilizziamo 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;

Sai una soluzione per questo?

EDIT:. Stiamo usando CloudFront così

È stato utile?

Soluzione

cercare di specificare il tipo di contenuto dell'immagine con header('Content-Type: image/jpeg'); o header('Content-Type: image/png');

forse dovrete usare attaccamento disposizione contento di lasciare PHP specificare il tipo di contenuto (posizione lasciare il compito al server web)

$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();

Altri suggerimenti

Non è un bug

S3 per sé non sa cosa mimetype l'oggetto memorizzato è. Quando si put l'oggetto in S3 è necessario includere anche Content-Type e Content-Disposition le intestazioni (e quant'altro può essere utile). Quando lo fa, S3 risponderà con quei valori di intestazione quando, o chiunque altro, s 'l'oggetto

Dal momento che questo bug non è limitato a Firefox (IE sta anche cercando di salvarlo come il tipo sbagliato, anche se almeno rende conto che è un'immagine), direi che S3 sta tornando il mime-type sbagliato per il file.

Quando le persone chiedono questo su altri forum li indico nella direzione della questo script . Non dovete usare tutto questo, ma è un bel puntatore nella direzione giusta.

I wont scrivo più come gli altri hanno risposto a questa abbastanza bene.

Mi sono imbattuto in questo problema io stesso una volta. Credo che l'unica vera soluzione per esso (al momento) è stato quello di aggiungere qualcosa come "# .jpg" alla fine dell'URL. Che non dovrebbe influenzare la lavorazione e costringerà FF per impostare il tipo di download per jpg.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top