//關於文件下載時採用文件流輸出的方式處理:
//加上response.reset(),並且所有的%>後面不要換行,包括最後一個;
response.reset();//可以加也可以不加
//application.getRealPath("/main/mvplayer/CapSetup.msi");獲取的物理路徑
//想辦法找到要提供下載的文件的物理路徑+文件名
String filenamedownload = "/resources/mobile/recon/";
String logfile = request.getParameter("logfile");
File logDir = new File(JawaGlobals.getHomeDirectory(), "logs");
//顯示給用戶的下載文件名
java.io.OutputStream outp = null;
java.io.FileInputStream in = null;
try {
outp = response.getOutputStream();
in = new FileInputStream(new File(logDir,logfile));
response.setContentType("application/x-download");
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(logfile, "UTF-8"));
byte[] b = new byte[1024];
int i = 0;
while ((i = in.read(b)) > 0) {
outp.write(b, 0, i);
}
outp.flush();
<!--由於jsp container在處理完成請求後會調用releasePageContet方法釋放所用的PageContext object,
並且同時調用getWriter方法,由於getWriter方法與在jsp頁面中使用流相關的getOutputStream方法衝突,
所以會造成這種異常,解決辦法是:只需要在jsp頁面的最後加上兩條語句: out.clear();out=pageContext.pushBody();
即可(其中out,pageContext均爲jsp內置對象!)-->
//以下兩行可以解決首行出現換行而出現的流關閉異常錯誤
out.clear();
out = pageContext.pushBody();
} catch (Exception e) {
System.out.println("Error!");
response.setCharacterEncoding("UTF-8");
out.write("<div class='alert alert-error'>文件不存在!</div>");
e.printStackTrace();
} finally {
if (in != null) {
in.close();
in = null;
}
}
%>