我有一個servlet允許用戶從網頁下載(可能很大)的zip文件。如果用戶點擊一個鏈接,下載一個壓縮文件,類似的代碼在servlet中執行以下操作:Java Servlets:當用戶離開頁面時文件下載中斷
response.setContentType("application/zip");
response.setHeader("Content-disposition", "attachment; filename=foo.zip");
response.setHeader("Pragma", "");
response.setHeader("Cache-Control", "no-store");
ZipOutputStream out = new ZipOutputStream(response.getOutputStream());
// write entries to the zip file...
...
out.close()
但是,如果用戶刷新或退出下載後離開當前頁面開始之前它完成(在Firefox 3.5.7中),下載將失敗。以下錯誤彈出:
C:\等等\ foo.zip.part不能 保存,因爲源文件可能 無法讀取。
稍後重試,或聯繫服務器 管理員。
關於如何確保下載在這種情況下繼續的任何想法?
UPDATE:啓動下載的鏈接是普通的香草鏈接。有趣的是,IE的行爲不同。點擊網站上其他地方的鏈接(來自當前加載的屏幕)似乎無法加載(瀏覽器狀態欄顯示「正在等待https://mysite/clicked_linky.do ...」),直到下載完成。在地址欄中鍵入不同的URL或使用快捷方式/收藏夾鏈接可導航離開頁面,但下載會按預期繼續。只有Firefox似乎顯示了我上面描述的確切行爲,儘管IE阻止並不是最優的。
我同意,一個獨立的下載servlet請求應如果客戶端將瀏覽器帶到另一個頁面或刷新,那麼不會搞砸了,我已經在Java中實現了一個下載servlet,並且沒有遇到任何這些問題 – 2010-01-14 21:23:00
這是一個普通的香草鏈接,我更新了問題。 – Jeff 2010-01-14 21:39:55