2012-02-06 6 views
8

Tengo un problema con el nombre de un archivo adjunto. Cuando llamo al sitio en google chrome, devuelve el archivo con el nombre y la extensión correctos. Lo probé con Internet Explorer y funciona bien también. El problema radica solo en Firefox. Llamo al sitio y devuelve la primera palabra en el título del archivo y sin extensión.encabezado Firefox y Content-Disposition

Por ejemplo, si quería un archivo llamado "Mi informe.docx", se convierte en un archivo llamado "Mi". Busqué en Google y resulta que este es un problema común con las personas porque los navegadores leen los encabezados de manera diferente. Se dijo que el arreglo es de citar el nombre del archivo:

Content-Disposition: attachment; filename=My Report.docx

es ahora: (nótese las comillas)

Content-Disposition: attachment; filename="My Report.docx"

Sin embargo, que no funcionó para mí.

En Chrome, devolvió "Mi Informe.docx" (en realidad con las comillas). Firefox devolvió un archivo impar que tenía la extensión adecuada y el nombre propio, y sin comillas, pero no pudo ser ejecutado. Era el tamaño de archivo adecuado, la extensión adecuada y el nombre adecuado, pero no se pudo ejecutar. También devuelve un espacio antes y después del nombre del archivo.

+3

posible duplicado de [¿Cómo codificar el parámetro de nombre de archivo del encabezado Content-Disposition en HTTP?] (Http://stackoverflow.com/questions/93551/how-to-encode-the-filename-parameter-of-content -disposición-encabezado-en-http) –

+1

Si se está preguntando por qué su Firefox está ignorando este encabezado, verifique si tiene instalado el complemento 'InlineDisposition': es un gran complemento escrito específicamente para deshabilitar' Content-Disposition' forzando una descarga , y es fácil de olvidar al hacer el desarrollo web. –

+2

Las comillas dobles funcionaron en IE, Chrome y FireFox para mí, utilizando las últimas versiones. – angularsen

Respuesta

4

Esto debería funcionar como se esperaba, aquí es otra SOQ con el mismo problema:

y también la página de Mozilla (supongo que estabas haciendo referencia éste):

no sé los detalles de su código del lado del servidor, pero aquí hay algunas cosas para confirmar/Proveedores:

  • Si tiene PHP disponible en el servidor, se puede probar el código del primer foro ? De lo contrario, probablemente pueda encontrar algo en la red en el idioma de su elección. De esta manera, puede confirmar si el problema está en su código o en otro lugar (configuración del servidor, navegador, etc.)
  • ¿Esto sucede en otras máquinas cliente (es decir, desde donde intenta descargar) o solo en esa? Es posible que desee probar a otros para confirmar.
  • ¿Funciona bien en IE/Safari u otro navegador? Incluso puede intentar hacerlo con wget o curl desde la línea de comandos o algo así.
  • ¿También proporciona el encabezado Content-Type correctamente?
  • ¿Puedes intentar descargar algún otro archivo o un archivo de un tipo diferente, p. a .png o .xls? De hecho, probablemente lo más fácil sería probar un archivo de texto plano (text/plain) y luego tomarlo desde allí.

Espero que esto ayude.

+0

Bien, gracias por la respuesta, pero ese primer enlace es lo que estoy haciendo en el código php. Y sí, eso es a lo que me refiero también. Traté de hacer lo que decía al citarlo, pero todo lo que hizo fue colocar espacios adicionales en el frente y al final en el nombre del archivo para que fuera como "Mi informe.docx" y es por eso que no se puede ejecutar . Intenté usar str_replace() pero eso no funcionó. Intenté todo. Puedo hacer que funcione para un navegador, pero que se rompa en el otro ... es casi imposible encontrar un equilibrio ... Tampoco estoy proporcionando un encabezado Content-Type –

+0

Bien, así que descubrí lo que usa con todos la maldita pena Es porque estoy usando una variable como nombre. Mis códigos escritos: $ name2 = "filename =". "$ Name"; header ('Content-Disposition: attachment;'. $ Name2); Trata el "$" en la variable como un espacio cuando es procesado por el servidor. Tengo que encontrar una forma de pasar eso ... No tengo ni idea de si eso es posible -.- –

+0

¡Genial, me alegro de que haya funcionado para ti! –

4

Sé que esta es una pregunta muy antigua, pero recientemente tuve el mismo problema.La solución es bien

  1. codificar el nombre de fichero por RFC2184 o,
  2. Si usted no tiene caracteres especiales en su nombre, cita en la cadena de disposición de contenido.

Dado que ya ha intentado 2, podría intentar usar 1 y ver cómo funciona.

Por lo general utiliza la clase ContentDisposition para generar mi cabecera para mí:

Dim contentDispositionHeader = New Net.Mime.ContentDisposition() With {.FileName = filename} 
Response.AddHeader("Content-Disposition", contentDispositionHeader.ToString()) 

Espero que esto ayude.

+1

Quiere leer RFC 5987 y RFC 6266. –

Cuestiones relacionadas