2012-09-27 29 views
3

我有一個基於請求中的某些參數使PDF實時響應的servlet。當我嘗試在IE中打開/下載此文件時,我收到以下消息:在HTTP請求中創建的PDF不會在Internet Explorer中打開

「無法從[站點]下載[文件名]。 無法打開此Internet站點。請求的站點要麼不可或不可能找到了,請稍後再試。「

這是我設置爲響應:

response.setHeader("Content-Disposition", "attachment;filename=" + title + ".pdf"); 

response.setContentType("application/pdf"); 

一切工作正常與其他瀏覽器。

更新:

我試過的內聯,而不是附件。這將打開一個新窗口而不是打開/保存對話框(我寧願有對話框),錯誤消息消失了,但新窗口在IE中只是空的。仍在與其他瀏覽器合作。

我試過圍繞文件名的簡單,雙引號和不引號,它不包含任何非轉義字符。雙引號和不引號沒有什麼區別,但是單引號會附加到文件名,我當然不想要。

文件名不包含未轉義的字符。

我檢查了this頁面上的測試,其中說attachement, with filename, no quotes已通過所有瀏覽器。這是從一開始就使用的。

添加Content-Lenght標頭沒有區別。順便說一句,飛碟是用來製作PDF的。

回答

2

這是一段時間,但認爲我應該更新這個,因爲找到了解決方案。

的CMS在使用中增加了一些頭至極我並沒有考慮到在第一次:

  • 的Cache-Control:私人
  • 雜注:無緩存

似乎是IE下載問題,如果沒有緩存。這些標題在CMS的升級中已更改,並解決了問題。

實施例:

  • 緩存控制:公共,最大年齡= 31536000
  • 日期:星期四,2012年12月6日14時14分14秒GMT
  • 過期:星期五,2013年12月6日14 :14:14 GMT
2

我建議看看http://greenbytes.de/tech/tc2231/,其中列出了大量測試用例,說明不同瀏覽器對Content-Disposition標頭的不同值的行爲。我的猜測是title包含需要轉義的空格或其他特殊字符,IE目前正在對非轉義值進行檢測。

+0

謝謝,這是非常有用的。但是測試用例等於我的頭文件被傳遞給所有瀏覽器。標題中也沒有未轉義的值。 – Karine

+0

什麼是您正在發送的標題的全部價值?而對於調試,發送的所有其他響應頭還有哪些? –

2

你有沒有嘗試以下標題:

response.setHeader("Content-Length", lenght); 
response.setHeader("Content-Disposition", "inline; filename='" + filename + "'"); 

文件名應爲excaped。

+0

我現在試過了。打開一個新窗口,並且沒有任何錯誤消息。但是新窗口中沒有內容。與其他瀏覽器仍然正常工作。 – Karine

1

我有同樣的問題,結果是IE不會處理響應代碼201(所有其他瀏覽器處理它)。當我將其更改爲200 IE時,該文件就好了。

This post指出我在正確的方向。

0

通過下面的代碼我可以在IE瀏覽器中的PDF。 response.setHeader(「Content-Disposition」,「attachment; filename =」+ title +「.pdf」);

非常感謝。

相關問題