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í

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top