2009-03-09 6 views
5

Al descargar un archivo con espacios Response.Write en el nombre del archivo son reemplazados por guiones bajos, y cuando se abre la aplicación asociada, un número entre corchetes se anexa:HttpResponse sustitución de guiones para espacios en los nombres de archivo

Response.AppendHeader("Content-disposition", "attachment; filename=this is the file.xml"); 
Response.Write(dr["InfopathDoc"]); 

esto da lugar a este nombre de archivo en la aplicación asociada:

este _is _la archivo _ [1] .xml

¿Cómo puedo deshacerme de los guiones y por qué obtener la [1]?

Gracias

Respuesta

3

Si alguien sigue interesado:

Este tipo de nombre de archivo reescritura es realizado por el navegador sólo como se puede ver al inspeccionar la respuesta HTTP recibida con una herramienta adecuada, independientemente del navegador utilizado. IE primero descarga el archivo solicitado en su sistema de carpeta "Archivos temporales de Internet" (que no es solo uno, pero este es otro tema), y para este propósito el archivo recibe un nuevo nombre, haciendo la mejor coincidencia con la "Disposición del contenido" sugerencia de la respuesta HTTP.Pero si un archivo con el mismo nombre ya está presente en , la carpeta actual "Archivos de Internet temporales" realmente utilizada para este archivo, su nombre se extiende por un número secuenciado entre corchetes, como "[2]". Debido a que cada nueva solicitud HTTP hace que el mecanismo de caché de IE compute nuevamente la carpeta de caché real, y la siguiente carpeta de caché elegida puede no contener aún un archivo con ese nombre, el número puede desaparecer en la siguiente descarga de un archivo o recurso con el mismo nombre.

Si un archivo descargado se almacena en alguna parte, el nombre de archivo originalmente sugerido se usa normalmente, dependiendo de la versión de IE. Algunas versiones y niveles de parches parecen usar el nombre de archivo de la carpeta de caché :-(

El problema comienza a ser molesto cuando el navegador entrega un archivo descargado a una aplicación elegida o seleccionada automáticamente. En este caso, se llama a la aplicación para abrir el archivo directamente desde el caché, lo que es malo por al menos 2 razones:

(1) El nombre del archivo será el nombre del archivo en la carpeta del caché, no el nombre sugerido. extensión, que va a confundir algunas aplicaciones, incluso si han sido elegidos para gestionar el archivo correctamente.

(2) Si un usuario descarga de Internet novato y se abre un archivo para la edición y simplemente presiona el botón "Guardar" de la aplicación, el archivo simplemente se guarda en la carpeta de caché de IE, y ningún usuario de este tipo volverá a encontrar este archivo. Estas son cosas que pueden convertir la gente realmente enojado y desesperado ...

+0

Ha pasado un tiempo desde que miré esto, pero dado que me has dado 2 buenas respuestas, ¡al menos tengo que aceptar una! Gracias – Graeme

0

¿Usted intentó reemplazar espacios con "20%" (sin qoutes dobles) al igual que en las URL?

Pero debería considerar avoid spaces in filenames (en URL).

+0

que corrige el nombre del archivo en el cuadro de diálogo de descarga de archivos de IE, pero cuando las cargas de aplicaciones que muestra el% 20 en el nombre del archivo, y sigue siendo el [1]. – Graeme

0

¿No debería estar utilizando Response.Output.Write() en su lugar, después de HTMLEncoding de la salida? :

Response.Output.Write(Server.HtmlEncode(Convert.ToString(dr["InfopathDoc"]))); 

Editar: Los guiones y la [1] añadido a su nombre sugiere que se carga desde la carpeta de archivos temporales de Internet. No hay información suficiente para deducir por qué esto puede estar sucediendo, pero tal vez esta información le dará una pista.

+0

Quizás, pero eso no cambia el nombre del archivo descargado. – Graeme

0

Al parecer, este es un problema con Internet Explorer 7 y requiere una revisión: http://support.microsoft.com/kb/952730/en-us

todavía no saben sobre el número que está siendo agregado sin embargo - pensé que tal vez es porque un archivo con el mismo nombre ya existe en el Carpeta de descarga temporal de IE, pero ese no es el caso.

5

encontrado la solución para este problema aquí

http://dotnetslackers.com/Community/blogs/kaushalparik/archive/2009/05/06/file-download-problem-filename-with-spaces-truncated-in-ff-and-replaced-by-underscore-in-ie.aspx

Para resolver el problema de FF, agregue comillas alrededor del nombre de archivo como

Response.AddHeader ("Content-Disposition", " archivo adjunto; filename = \ "" + nombre de archivo + "\" ");

Y para IE, sustituir los espacios con '% 20'

nombre de archivo = toDownload.Name.Replace ("", "% 20");

3

En la red hay algunas sugerencias para solucionar este tipo de problema. No todas las soluciones funcionan en todas partes y para todos los navegadores, pero algunas soluciones, al menos, garantizar "Guardar resultados" a pesar de que no pueden mantener el principio "sugirió" nombre de archivo para todos los clientes:

La primera vista:

Content-Disposition: attachment ; filename = My New Document.pdf;

FF36: Presentes para descargar el archivo "Mi" :-( IE6: Presentes "Mi Nueva DOCUMENTO.pdf", pero al abrirla puede aparecer como "Mi nuevo documento [1] .pdf" : IE8. Presenta "My_New_Document.pdf", pero también puede agregar "[1]" como IE6. ATTN: Al guardar el documento, IE mantiene el nombre presentado, independientemente de lo que entregue a la aplicación seleccionada en la apertura directa!

primera mejora:

Content-Disposition: attachment; filename = "Mi Nueva DOCUMENTO.pdf";

FF36: Funciona como se supone, i. mi. presenta "Mi nuevo documento.pdf". IE6 + IE8: Sin cambios, al igual que antes.

segundo cambio:

Content-Disposition: attachment; filename = "Mi% 20Nuevo% 20Documento.pdf";

(sustituir por espacios en blanco 20%, como en la codificación URL, y tener dobles comillas.)

FF36: presenta lo que fue enviado de vuelta, que es "Mi% 20New% 20Document.pdf". No está bien. IE6 + IE8: presenta "Mi nuevo documento.pdf", pero reparte "Mi% 20New% 20Document.pdf".

Tercera variación:

Content-Disposition: attachment; filename = My% 20New% 20Document.pdf;

(Eliminar comillas dobles, pero mantener% 20.)

FF36: Igual que el anterior - no es agradable. IE6 + IE8: Como arriba, no es tan lindo también.

Conclusión:

Parece que al menos los métodos presentados no resuelven el problema de todas y para siempre: Ni se cubren todas las situaciones de 1 navegador, ni cubren todos los navegadores para la situación en cualquier mismo seleccionado .

Para mí, el mejor resultado parece ser posible con las comillas dobles circundantes: para FF36 e IE6 que funciona, y para IE8 (y probablemente para IE7) es al menos estable con los guiones bajos, i. mi. descargar & guardar render el mismo nombre de archivo que & abrir, excepto el "[1]" que no podemos evitar de todos modos.

Observaciones finales

Algunas personas van con el pequeño rey de Saint-Exupérys "El Principito", que dice que un emperador no se puede esperar que su gente sigue cuando se exige lo que simplemente no es posible, lo que le hace ordene al sol que se levante y que se ponga justo cuando naturalmente lo hace. Al igual que este rey se mete en problemas cuando su pequeño planeta acelera su rotación cada vez más, estas personas se han rendido y simplemente ya agregan guiones bajos en el lado del servidor. :-)

Pero los RFC sobre este tema y lo que ofrecen los ejecutores del navegador es bastante difícil de superar veces.

Cuestiones relacionadas