標籤:
檔案下載不需要第三包就是靠檔案流、位元組輸入輸出資料流實現。
<table> <tr> <td align="right"> <a href="download.jsp?path=<%=getServletContext().getRealPath("123.png") %>">下載</a></td> </tr> </table>
download.jsp
<% response.setCharacterEncoding("utf-8"); String pathname = request.getParameter("path"); pathname = new String(pathname.getBytes("iso-8859-1")); File file = new File(pathname); InputStream ins = new FileInputStream(file); OutputStream os = response.getOutputStream(); BufferedInputStream bis = new BufferedInputStream(ins); BufferedOutputStream bos = new BufferedOutputStream(os); response.addHeader("Content-Disposition","attachment;filename="+new String(file.getName().getBytes("utf-8"),"iso-8859-1")); response.addHeader("Content-Length",file.length()+""); response.setContentType("application/octet-stream"); int len = 0; byte[] bys = new byte[1024]; while((len=ins.read(bys))!=-1){ bos.write(bys); bos.flush(); } out.clear(); out = pageContext.pushBody(); bos.close(); bis.close(); %>
上述代碼中調用了out.clear()和pageContext.pushBody()方法,是因為在JSP頁面中內建有out,再使用response.getOutStream()方法會拋出java.lang.IllegalStateException異常,不過上述代碼中本人去掉這兩行也沒錯。
java下載檔案