2012-06-19 9 views
5

Ho riscontrato un problema enorme in tutti i browser.Download CSV come HTM

Ho un sito in cui i clienti possono scaricare un file CSV che contiene i dettagli di cui hanno bisogno.

Il problema che sto avendo è che il file csv viene scaricato senza estensione o come file htm.

Nel codice sto specificando il nome del file con .csv, anche il file sul server è un .csv.

Il codice è il seguente

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(); 

Ho provato context.Response.ContentType = "text/html"; e context.Response.ContentType = "application/octet-stream";.

È in esecuzione su IIS6.

Qualcuno sa che cosa potrebbe causare questo?

+0

Su quale browser? –

+0

@NicholasMurray _Ho un problema enorme in tutti i browser._ leggi il testo. – EaterOfCode

+1

@EaterOfCorpses - e quali browser puoi dedurre da "tutti i browser"? IE 5, Firefox 1? –

risposta

0

Ok ho lavorato perché i file non stanno scaricando in formato CSV.

perché il nome del file contiene degli spazi, quindi devo racchiudere il nome del file in modo che non sia tagliato nello spazio.

Grazie per tutto il vostro aiuto

2

Assumendo che il verbatim string literal è su una sola riga nell'origine, hai provato a sostituire il , nel vostro Content-Disposition intestazione con un ;? Gli esempi che ho trovato usano sempre un punto e virgola li.

Potrebbe anche essere più sicuro per usare le virgolette attorno al nome del file per proteggere il colpo di testa di caratteri speciali:

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

Sì, ciò lo renderebbe conforme alla sezione 19.5.1 della RFC in questione: http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html –

+0

Poiché letterale letterale non è affatto necessario nell'esempio dell'OP , Sospetto che sia in realtà una stringa multi linea. A proposito, il carattere di escape non funziona con letterali letterali, prova a cambiare quella costante a '@" attachment; filename = "" {0} "" "' o, ancora meglio, rimuovi il prefisso '@'. – Groo

+0

Fammi provare e le questioni da mia domanda Tutti i browser - FF, IE e Chrome context.Response.AppendHeader ("Content-Disposition", @ "attachment; filename =" + ((stringa) Path.GetFileName (downloadFilePath))); Questo è tutto su una riga nel file di codice – user1466569