2012-06-19 48 views
5

我在所有瀏覽器中都遇到了很大問題。CSV下載爲HTM

我有一個網站,客戶可以下載包含他們所需詳細信息的csv文件。

我遇到的問題是,csv文件下載沒有擴展名或作爲htm文件。

在代碼中,我使用.csv指定文件名,服務器上的文件也是.csv。

的代碼如下

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

我試圖context.Response.ContentType = "text/html";context.Response.ContentType = "application/octet-stream";

它在IIS6上運行。

有誰知道可能是什麼原因造成的?

+0

在哪個瀏覽器上? –

+0

@NicholasMurray _我在所有的瀏覽器中遇到了一個大問題。 – EaterOfCode

+1

@EaterOfCorpses - 你能從「所有瀏覽器」推斷出哪些瀏覽器? IE 5,Firefox 1? –

回答

0

好,我已經制定了爲什麼文件沒有下載爲CSV。

它是因爲文件名中有空格,所以我需要將文件名附上,以便它不會在空格處切斷。

謝謝你的全力幫助

2

假設您的源代碼中您的verbatim string literal位於單行上,是否嘗試用;替換Content-Disposition表頭中的,?我發現的例子總是在那裏使用分號。

它也可能是更安全的使用引號在你的文件名,以保護頭部,從特殊字符:

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

是的,這將使其符合相關RFC的第19.5.1節:http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html –

+0

由於OP的例子中完全不需要逐字文字,我懷疑它實際上是一個多行字符串。順便說一下,轉義字符不適用於逐字文字,請嘗試將該常量更改爲「@」附件; filename =「」{0}「」「',或者更好的方法是刪除前綴」@「。 – Groo

+0

讓我試試並回答我的問題 所有瀏覽器 - FF,IE和Chrome context.Response.AppendHeader(「Content-Disposition」,@「attachment; filename =」+((string)Path.GetFileName downloadFilePath))); 這是在代碼文件 – user1466569