2012-02-06 19 views
8

我的附件名稱有問題。當我在谷歌瀏覽器上調用該網站時,它會以正確的名稱和擴展名返回該文件。我用Internet Explorer對它進行了測試,它也能正常工作。問題只在於Firefox。我打電話給該網站,它返回文件標題中的第一個單詞並且沒有擴展名。Firefox和Content-Disposition標題

例如,如果我想要一個名爲「我的report.docx」的文件,它會打開一個名爲「My」的文件。我搜索了一下,結果發現這是人們常見的問題,因爲瀏覽器以不同的方式讀取頭文件。他們說,解決辦法是引用的文件名:

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

現在是:(注意引號)

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

然而,這並沒有爲我工作。

在chrome上它返回「My Report.docx」(實際上帶有引號)。 Firefox返回了一個奇怪的文件,它具有正確的擴展名和專有名稱,並且沒有引號,但它無法執行。這是正確的文件大小,適當的擴展名和專有名稱,但它無法執行。它還會在文件名稱前後返回一個空格。

+3

的可能重複的[如何在HTTP內容處理標頭的文件名參數編碼?](http://stackoverflow.com/questions/93551/how-to-encode-the-filename-parameter-of-content -disposition頭功能於HTTP) – 2013-10-14 18:22:34

+1

如果你想知道爲什麼你的Firefox是忽略這個頭,檢查您是否已經安裝了'InlineDisposition'插件:這是專門寫一個偉大的插件禁用'內容Disposition'強迫下載,並且在進行Web開發時很容易忘記。 – 2014-09-25 13:13:03

+2

雙引號適用於IE,Chrome和FireFox,使用最新版本。 – angularsen 2015-06-10 11:15:10

回答

4

這應該按預期工作,這裏的另一個SOQ同樣的問題:

,也是Mozilla的網頁(我猜你引用這一項):

我不知道你的服務器端代碼的細節,但這裏有一些事情要確認/嘗試:

  • 如果你有PHP可用的服務器,你可以從上面的第一個鏈接嘗試代碼?如果沒有,你可以在你選擇的語言上找到網上的東西。這樣,您可以確認問題是在您的代碼或其他地方(服務器設置,瀏覽器等)
  • 這是發生在其他客戶端機器上(即您嘗試從哪裏下載)或僅在該機器上發生?您可能想嘗試其他人確認。
  • 這工作正常在IE/Safari或其他瀏覽器?你甚至可以嘗試從命令行或類似的東西wgetcurl
  • 您是否也正確提供Content-Type標題?
  • 您可以嘗試下載其他文件或其他類型的文件,例如: a .png.xls?事實上,最簡單的方法是嘗試一個純文本文件(text/plain),然後從那裏取出。

希望這會有所幫助。

+0

好的,謝謝你的回覆,但是第一個鏈接就是我在php代碼中所做的。是的,這也是我所指的。我試圖做什麼它說,引述,但所有它所做的只是在前端和末端上的文件名處多餘的空格所以它會像「我的report.docx」,這就是爲什麼它是不能夠被執行。我嘗試使用str_replace(),但沒有奏效。我嘗試了一切。我可以得到它的一個瀏覽器中運行,但比它打破了其他......它幾乎不可能找到一個平衡點...我也不提供Content-Type頭 – 2012-02-06 02:08:57

+0

好了,所以我想通了什麼與所有使用該死的悲痛。這是因爲我使用變量作爲名稱。我寫的代碼: $ name2 =「filename =」。「$ name」; header('Content-Disposition:attachment;'。$ name2); 它將變量中的「$」視爲服務器處理的空間。我的傳球被....我不知道的方式計算出來,如果制定出了這就是你甚至可以-.- – 2012-02-06 02:18:03

+0

酷,很高興! – 2012-02-06 02:20:14

4

我知道這是一個非常古老的問題,但我最近遇到了同樣的問題。解決的辦法是要麼

  1. 每進行編碼或RFC2184
  2. 你的文件名。如果你沒有在你的文件名的特殊字符,引號,在內容配置字符串。

由於您已經嘗試過2,所以您可以嘗試使用1並查看結果如何。

我通常使用ContentDisposition類來生成我的頭對我來說:

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

希望這有助於。

+1

您想閱讀RFC 5987和RFC 6266。 – 2013-10-14 15:43:41