Come posso risolvere Firefox cercando di “Salva immagine con nome” .htm?
-
23-08-2019 - |
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ì
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.