2012-06-19 16 views
5

Tengo un gran problema en todos los navegadores.Descargas CSV como HTM

Tengo un sitio donde los clientes pueden descargar un archivo csv que contiene los detalles que necesitan.

El problema que tengo es que el archivo csv descarga sin extensión o como un archivo htm.

En el código estoy especificando el nombre del archivo con .csv, el archivo en el servidor también es un .csv.

El código es el siguiente

context.Response.Buffer = true; 
context.Response.Clear(); 
context.Response.ClearHeaders();      
context.Response.ContentType = "text/csv"; 
context.Response.AppendHeader("Content-Disposition", @"attachment,  
    filename=" + ((string)Path.GetFileName(downloadFilePath))); 
context.Response.WriteFile(downloadFilePath); 
context.Response.Flush(); 
context.Response.Close(); 

He tratado context.Response.ContentType = "text/html"; y context.Response.ContentType = "application/octet-stream";.

Se está ejecutando en IIS6.

¿Alguien sabe lo que podría estar causando esto?

+0

¿Sobre qué navegador? –

+0

@NicholasMurray _Estoy teniendo un gran problema en todos los navegadores._ lea el texto. – EaterOfCode

+1

@EaterOfCorpses, ¿y qué navegadores pueden inferir de 'todos los navegadores'? IE 5, Firefox 1? –

Respuesta

0

autorización I han trabajado por qué no se están descargando archivos en formato CSV.

es porque el nombre del archivo tiene espacios, por lo que debo adjuntar el nombre del archivo para que no se corte en el espacio.

Gracias por su ayuda

2

Asumiendo que su verbatim string literal es en una sola línea en su fuente, ¿ha intentado sustituir el , en su cabecera Content-Disposition con un ;? Los ejemplos que he encontrado siempre usan un punto y coma allí.

También podría ser más seguro de usar comillas alrededor de su nombre para proteger la cabecera de caracteres especiales:

context.Response.AppendHeader(
    "Content-Disposition", 
    string.Format(
     "attachment; filename=\"{0}\"", 
     Path.GetFileName(downloadFilePath))); 
+1

Sí, eso lo haría conforme con la sección 19.5.1 del RFC pertinente: http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html –

+0

Dado que el literal literal no es necesario en absoluto en el ejemplo de OP , Sospecho que de hecho es una cadena de varias líneas. Por cierto, el carácter de escape no funciona con literales verbatim, intente cambiar esa constante por '@" attachment; filename = "" {0} "" "' o, mejor aún, elimine el prefijo '@'. – Groo

+0

Permítanme tratar de las preguntas de mi pregunta Todos los navegadores - FF, IE y Chrome context.Response.AppendHeader ("Content-Disposition", @ "apego; filename =" + ((cadena) Path.GetFileName (downloadFilePath))); Todo esto en una sola línea en el archivo de código – user1466569