java下载文件
文件下载不需要第三包就是靠文件流、字节输入输出流实现。
<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异常,不过上述代码中本人去掉这两行也没错。