2014-07-15 81 views
1

我有一個servlet,其中的一個動作可以根據從表單中傳遞過來的參數生成一個CSV文件。 servlet代碼段看起來像這樣:由servlet生成的文件沒有下載

response.setContentType("text/csv"); 
response.setCharacterEncoding("UTF-8"); 
response.setHeader("Content-Disposition","attachment; filename=" + filename); 
PrintWriter pw = response.getWriter(); 
pw.println(content); // content is some CSV in a string 
pw.close(); 

的瀏覽器(二者FF和鉻)似乎被忽略附件指示器,因爲它改變URL到相應的動作(例如http://myserver.com/filedownload)和不呈現另存爲對話。我檢查Chrome的響應頭,它看起來像這樣(編輯現在顯示完整的,「未解析」標頭):

HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
Content-Disposition: attachment; filename=JobTracking.csv 
Content-Type: text/csv;charset=UTF-8 
Content-Length: 16876 
Date: Tue, 15 Jul 2014 22:32:49 GMT 

..和「響應」選項卡顯示我的內容寫入回覆。

我接近我的智慧結局,因爲我看過的所有例子都很成功。

+0

請張貼瀏覽器接收完整的響應。也許有一個重定向發生? –

+0

通過「完全響應」,您是指Chrome開發人員工具窗口中「響應」選項卡上的內容?這只是將CSV寫入響應。我編輯了問題以顯示「未解析的」響應標題。 –

+0

什麼是請求URI,以及「相應操作」是什麼意思? –

回答

0

在jQuery手機中,默認情況下,表單由Ajax處理,使用data-ajax =「false」解決了問題。

<form id="myform" action="../filedownload" method="POST" data-ajax="false"> 

位頭打耳光的時刻,有:-)

1

在您的示例中,您的內容類型和編碼已交換。它應該是

response.setContentType("application/vnd.ms-excel"); 
response.setCharacterEncoding("UTF-8"); 

不知道你如何回覆Content-Type:application/vnd.ms-excel;charset=UTF-8雖然。

編輯:

而且,正確的MIME類型CSV文件是text/csv而不是application/vnd.ms-excel - 這一個是*.xls文件。

+0

我爲了可讀性取代常數與實際值。不幸的是,我把它們交換了一遍。現在編輯的問題是正確的。更改爲text/csv沒有區別,application/x-unknown也沒有,或者其他任何內容。 –

+0

@DaveNottage請發佈完整的回覆以及所有標題,如Julian Reschke建議的 – dimoniy