2010-01-04 10 views
6

Estaba tratando de implementar un "enlace de descarga" y ponerlo junto a una de las tablas de informes para que los usuarios puedan descargar un archivo csv y abrirlo con aplicaciones como Excel."enlace de descarga" falla en IE

Los registros se generan de forma dinámica en función de la consulta realizada por los usuarios.

Así que en algún lugar de mi regulador hay algo así como:

response.headers['Content-Type'] = 'text/csv' 
response.headers['Content-Disposition'] = 'attachment; filename=xxx.csv' 
return response.stream(dynamically_generated_csv, request=request) 

Esto funciona tanto en FireFox & Chrome, pero falla en IE.

Cuando imprimo las cabeceras de respuesta, he encontrado que varias cabeceras se añadieron a mi respuesta por web2py: 'Expira', 'Cache-Control', etc ...

Y cuando quito el 'caché -Control 'encabezado haciendo lo siguiente:

del response.headers['Cache-Control'] 

Funciona en IE.

Parece que IE tiene problemas para manejar un archivo descargable con 'Cache-Control' establecido en cierto valor.

Ahora, mi pregunta es:

  • ¿Por qué web2py añadir estas cabeceras de respuesta, de manera implícita? y tal vez sin una forma de activarlo?

  • ¿Hay algún efecto secundario cuando elimino el encabezado 'Cache-Control' de esta manera?

Gracias de antemano.

+2

Este es un defecto conocido en ciertas versiones de IE: http://support.microsoft.com/kb/323308 –

+0

Cuando estaba usando Django, los encabezados de respuesta son solo los que establecí explícitamente; sin embargo, en el caso de web2py, agregó encabezados de respuesta sin el conocimiento de los desarrolladores, por lo que creo que tal vez este no sea un buen diseño para un marco, le costó tiempo a las personas averiguar qué está sucediendo bajo el capó. – satoru

+2

Al servir archivos estáticos, web2py establece encabezados de caché para asegurarse de que su navegador no solicite archivos que ya tiene y que no haya cambiado en el servidor. Cuando se sirve contenido dinámico, web2py se asegura de que el navegador no lo guarde en caché (este es su caso, creo). La filosofía de web2py es diferente a la de otros frameworks. Intenta hacer todo lo posible para que no tenga que aprender cómo hacerlo (en este caso, cómo administrar la memoria caché del navegador). Como se ha señalado, el problema es un error de IE. Lo mencionaré en la lista de correo web2py y lo discutiré con otros desarrolladores. – mdipierro

Respuesta

5

No estoy seguro de qué encabezados de control de caché están siendo enviados, pero IE tiene un error con los archivos descargados como los que está experimentando.

Para IE, DEBE habilitar el almacenamiento en caché. Cuando IE carga archivos (por ejemplo, archivos de Excel), en Excel, los carga desde el directorio de caché, por lo tanto, si no los almacena en caché, Excel (o su otra aplicación) no podrán cargar el archivo.

Eric Law (MSFT) sobre el tema: http://blogs.msdn.com/ieinternals/archive/2009/10/02/Internet-Explorer-cannot-download-over-HTTPS-when-no-cache.aspx

actualización: Sin embargo, si lo que desea es forzar la descarga ... por ejemplo, no tiene IE cargar el archivo Excel dentro de la ventana IE ... luego asegúrese de configurar los encabezados completos para el archivo adjunto.

//PHP style 
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment; filename="downloaded.pdf"'); 
+0

Gracias por su explicación. Pero creo que este puede no ser el mismo problema que encontré. Establecí explícitamente 'Content-Disposition' en 'attachment' y creo que esto, con suerte, evitará que el archivo se abra incluso en IE. – satoru

+1

Aún más problemático que los encabezados de control de caché, y como se menciona en la entrada del blog de Eric, es el hecho de que a las personas preocupadas por la seguridad les gusta habilitar la opción de Internet Explorer 'No guardar páginas encriptadas en el disco' que no está restringido al almacenamiento en caché pero * totalmente * impide guardar en el disco * cualquier * archivo de sitios habilitados para SSL. Defectuoso por diseño. – Archimedix

+0

Satoru: ¿modificó el trabajo de disposición de contenido? Estoy experimentando el mismo problema en este momento. –

0

Esto no responde a su pregunta, pero resuelve, espero, el problema original.

Acabo de agregar la marca de tiempo (algo lo suficientemente único) para consultar la cadena de enlace al archivo CSV. Me ayudó.

2

¿El enlace de descarga usa https (ssl)? Si es así, IE no puede manejar la descarga si está configurada para ser almacenada en caché. Este es un problema conocido con IE.

+0

No, solo uso HTTP simple. – satoru

Cuestiones relacionadas