Comment puis-je résoudre Firefox essayer de « Enregistrer l'image sous » .htm?
-
23-08-2019 - |
Question
Nous avons récemment mis en place Amazon S3 sur notre site qui nous a permis de changer la façon dont nous traitons les images. Nous avons l'habitude d'appeler un /fotos.php contrôleur qui lit le fichier à partir du disque, enregistrer quelques statistiques, mis en-têtes et retourner le contenu du fichier comme image / jpeg.
Tout est allé OK jusqu'à ce que S3. Fotos.php fait maintenant une redirection 302 à la ressource en Amazonie et tout est agréable et travailler, mais vous ne pouvez pas enregistrer une image dans Firefox, car il définit son type de fichier .htm. J'ai trouvé cette discussion sur la question, et il semble comme un bug dans Firefox:
https://bugs.launchpad.net/ubuntu /+source/firefox-3.0/+bug/207670
Voici une URL présentant le problème (essayez de sauver la grande image):
http: // www .viajeros.com / fotos / el-gran-lago-de-atitlan-y-SUS-volcanes / 132968
Internet Explorer 6 au moins essaie de l'enregistrer comme untitled.bmp.
Voici l'extrait de code que nous utilisons dans 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;
Savez-vous une solution de contournement pour cela?
EDIT:. Nous utilisons CloudFront et
La solution
essayez de spécifier le type de contenu de l'image avec
header('Content-Type: image/jpeg');
ou
header('Content-Type: image/png');
peut-être vous devrez utiliser la fixation de disposition de contenu pour laisser PHP spécifier le type de contenu (emplacement laisser la tâche au serveur 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();
Autres conseils
Il est pas un bug
S3 lui-même ne sait pas ce que MIMETYPE l'objet stocké est. Lorsque vous PUT l'objet S3 vous devez inclure également Content-Type et Content-Disposition en-têtes (et tout ce que vous voudrez peut-être). Lorsque vous le faites, S3 répondra avec ces valeurs d'en-tête lorsque vous, ou quelqu'un d'autre, GET de l'objet
Étant donné que ce bug ne se limite pas à Firefox (IE essaie aussi de l'enregistrer comme un mauvais type, bien au moins se rend compte qu'il est une image), je suppose que S3 retourne le mauvais type MIME pour la fichier.
Quand les gens demandent ce sur d'autres forums, je leur point dans la direction de cette script. Vous ne devez pas utiliser tous, mais son un pointeur agréable dans la bonne direction.
J'écris coutume plus que les autres ont répondu à cette assez bien.
Je suis tombé sur cette question moi-même une fois. Je pense que la seule solution réelle pour elle (à l'époque) était d'ajouter quelque chose comme « # .jpg » à la fin de l'URL. Cela ne devrait pas affecter votre traitement et forcera FF à définir le type de téléchargement au format JPG.