我試圖將文件從HTTP Servlet中發送給用戶。 servlet運行一些標識測試(根據請求),然後向客戶端發送一個文件。如何以「正確」的方式從servlet發送文件?
這通常工作,但現在我把我的Tomcat服務器上重定向到HTTPS,當我嘗試訪問的servlet和IE6或IE8下載文件失敗,我得到這個異常:
java.lang.IllegalStateException: Cannot forward after response has been committed
(在localhost.log)
和
ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
(在servlet日誌)
,做發送(簡體)代碼:
private void sendFile(HttpServletResponse response, byte[] file, String clientFileName)
{
ServletOutputStream op = null;
setContentType(response);
response.setHeader("Content-Disposition", "attachment; filename=\"" + clientFileName + "\"");
// send byte array to output buffer.
op = response.getOutputStream();
// Content Length must be set after all processing done.
response.setContentLength((int) file.length);
op.write(file);
}
這是從一個servlet發送文件的正確方法是什麼?最好的方法是什麼?
謝謝!
UPDATE
用於從@BalusC條每頁代碼在此鏈接: http://balusc.blogspot.com/2007/07/fileservlet.html
這使得它的工作。
仍然Gmail,是因爲過濾階段的Gmail增加了在這些瀏覽器下載使用時,不會在IE6,IE8工作。
更新2
這個問題似乎是與Gmail + Internet Explorer的6-8。 我假設Gmail是做一個重定向(這實際上是很明顯的,如果你看一下頁面上的網址,你點擊郵件中的鏈接後)。 客戶拉技術是我唯一的解決方案嗎?