js|下載
昨天晚上用jspSmartUpload下載檔案,寫了一個下載的頁面(Download.jsp)如下:
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<%@ page import="java.io.*,mail.util.Encoding" %>
<jsp:useBean id="mySmartUpload" scope="page" class="com.jspsmart.upload.SmartUpload" />
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%
String filename =Encoding.encodingUnicode(request.getParameter("filename"));
mail.DbBase dbbase=mail.DbBase.getInstance();
String path=dbbase.getPath();
// 初始化
mySmartUpload.initialize(pageContext);
// 設定contentDisposition為null以禁止瀏覽器自動開啟檔案,
//保證點選連結後是下載檔案。若不設定,則下載的副檔名為
//doc時,瀏覽器將自動用word開啟它。副檔名為pdf時,
//瀏覽器將用acrobat開啟。
mySmartUpload.setContentDisposition(null);
// 下載檔案
if(filename!=null){
mySmartUpload.downloadFile(path+filename);
}
%>
</body>
</html>
執行下載時,檔案能正確下載,但是總是報錯。
java.lang.IllegalStateException: getOutputStream() has already been called for this response
後來還才發現,執行下載的頁面,在Java指令碼範圍外(即<% ...%>之外),不要包含HTML代碼、空格、斷行符號或換行等字元,有的話將不能正確下載。不信的話,可以在上述源碼中%><%之間加入一個分行符號,再下載一下,保證出錯。因為它影響了返回給瀏覽器的資料流,導致解析出錯。
修改後問題解決。