¿Cómo arreglo Firefox tratar de “Guardar como” .htm?
-
23-08-2019 - |
Pregunta
Hemos implementado recientemente Amazon S3 en nuestro sitio que nos llevó a cambiar la forma en que manejamos imágenes. Se utilizó para llamar a un controlador de /fotos.php que leer el archivo desde el disco, grabar algunas estadísticas, establecemos los encabezados y devolver el contenido del archivo como image / jpeg.
Todo fue bien hasta S3. Fotos.php ahora tiene un 302 redirigir al recurso en Amazon y todo está muy bien y de trabajo, pero no se puede guardar una imagen en Firefox, ya que fija su tipo de archivo como .htm. He encontrado esta discusión sobre el asunto, y parece que un error en Firefox:
https://bugs.launchpad.net/ubuntu /+source/firefox-3.0/+bug/207670
Aquí es una dirección URL que exhibe el problema (tratar de salvar la imagen grande):
http: // www .viajeros.com / fotos / el-gran-lago-de-atitlan-y-SUS-volcanes / 132968
Internet Explorer 6, al menos, intenta guardarlo como untitled.bmp.
Aquí está el fragmento de código que utilizamos en 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;
¿Sabe usted una solución para esto?
EDIT:. Estamos utilizando CloudFront, así
Solución
tratar de especificar el tipo de contenido de la imagen con
header('Content-Type: image/jpeg');
o
header('Content-Type: image/png');
tal vez usted tendrá que usar el apego disposición de contenido para que PHP especificar el tipo de contenido (localización dejar la tarea al servidor 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();
Otros consejos
No es un error
S3 en sí no se sabe qué tipo mime del objeto que almacena es. Cuando put el objeto en S3 es necesario incluir también Content-Type y Contenido-Disposición cabeceras (y todo lo que es posible que desee). Al hacerlo, S3 responderá con esos valores de cabecera cuando usted o cualquier otra persona, get 's el objeto
Dado que este error no se limita a Firefox (IE también está tratando de guardarlo como un tipo incorrecto, aunque al menos se da cuenta de que es una imagen), supongo que S3 está devolviendo el tipo MIME incorrecto para el archivo.
Cuando la gente pregunta esto en otros foros que ellas apuntan en la dirección de este script . Usted no tiene que utilizar todo eso, pero es un buen indicador en la dirección correcta.
No voy a escribir más que los otros han respondido a esta lo suficientemente bien.
Me encontré con este problema a mí mismo una vez. Creo que la única solución real para ello (en el momento) era para añadir algo así como "# .jpg" al final de la URL. Eso no debería afectar su procesamiento y obligará FF para establecer el tipo de descarga a jpg.