2009-04-21 16 views
5

Mi línea de asunto dice la mayoría de lo que estoy pidiendo. Tengo un sitio web que genera informes en varios formatos (HTML, CSV, TSV, Excel, etc.). Siempre que sea posible, me gustaría que estos archivos se muestren en el navegador. Con ese fin, he configurado mis encabezados para que "Content-Disposition" esté "en línea". Esto funciona de manera muy inconsistente con diferentes tipos de archivos. Parece que tanto en FF3 como en IE7, HTML siempre se abrirá en línea automáticamente. Eso tiene sentido. Si utilizo TSV, ambos navegadores solicitarán la descarga, ya que es un tipo de archivo desconocido en mi sistema. Eso también tiene sentido y es exactamente lo que quiero. Excel y CSV, sin embargo, ofrecen diferentes comportamientos. En FF, ambos siempre solicitan la descarga o la apertura. Si elijo "abrir", se abre en una nueva ventana. En IE, ambos también solicitan la descarga o la apertura. No puedo entender esto. Pensé que los archivos de Excel se abrieron en línea automáticamente con Content-Disposition: inline. Si elijo "abrir" en IE, se abre en línea en el navegador.archivos servidos con disposición de contenido: en línea todavía a veces se solicita la descarga

¿Alguien puede explicar el comportamiento inesperado? Esto no es realmente un problema para mí, pero mis usuarios piensan que es un error, por lo que una fuente autorizada que pueda citar para ellos sería excelente. Lo único que he encontrado hasta ahora sobre este "problema" es una publicación de 1 línea en un foro de Mozilla sobre cómo la apertura automática en línea es uno de los fallos de seguridad de IE ... que era una publicación anterior, así que tal vez fue "arreglado" en IE7? Gracias.

Respuesta

0

Compruebe que su servidor esté publicando el tipo MIME correcto para los archivos CSV y Excel. Para tratarlos adecuadamente, incluso un navegador que reconozca su tipo y tenga un manejador/complemento de tipo de archivo para ellos necesitará el tipo MIME correcto.

Es probable que desea que el tipo MIME de ambos para ser application/vnd.ms-excel

Si está cumpliendo estos con su servidor web como archivos normales, entonces el ajuste correspondiente en Apache es las mime.types archivo.

application/vnd.ms-excel xls csv 

Si está cumpliendo estos archivos de su aplicación, entonces tendrá que añadir el Content-Type: application/vnd.ms-excel header mismo.

Tenga en cuenta que para algunos usuarios puede que nunca funcione como se espera, por ejemplo, cualquiera que no tenga instalado Microsoft Office, o incluso cualquier persona que use un navegador alternativo o que haya interferido con sus asociaciones de tipo de archivo.

(para su interés, describe el procedimiento - resulta ser capaz de Plone/Zope pero la idea es la misma).

+0

Gracias por su respuesta, pero no creo que me ayude demasiado ... el tipo de contenido se está configurando correctamente. Estoy usando text/csv como el tipo de contenido para CSV, de acuerdo con RFC4180. Obtengo el mismo comportamiento en cuadros usando MS Office y Open Office, excepto que este último nunca se abre en línea en el navegador. Estoy usando IIS, por cierto. – rmeador

3

Es posible que haya resuelto esto ya, pero si no puedo tener una respuesta (por la gente del futuro con el mismo tema, esto también me volvía loco!)

Este comportamiento se puede sobrescribir en el cliente, utilizando el siguiente:

  1. Ir al explorador de windows
  2. Seleccione Herramientas -> Opciones de carpeta
  3. “Tipos de archivo”
  4. Seleccione la lengüeta
  5. Búsqueda extensión “DOC” (o “PDF , Etc)
  6. Seleccione “Avanzado”
  7. Tick/Desmarque “Confirmar apertura después de la descarga” según se desee.

El mecanismo utilizado para implementar la funcionalidad de vista previa/descarga es a través del uso del encabezado "disposición de contenido", generalmente usando MimeType "application /". Esto básicamente le dice al cliente local que abra la aplicación usando la aplicación especificada; sin embargo, las configuraciones anteriores para la aplicación pueden sobrescribir el formato de entrega solicitado.

+0

Genial: resuelve un problema antes de una implementación;) – alepuzio

Cuestiones relacionadas