Java文件下载
来源:互联网 发布:什么绘画软件好 编辑:程序博客网 时间:2024/05/16 23:57
前台:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <script type="text/javascript"> function download(filename){ var url = encodeURI("down2.jsp?filename="+filename); window.location.href= url; } </script> </head> <body>普通测试:<a href="javascript:void(0)" onclick="download('a.txt');">Down a.txt</a> 中文文件名测试:<a href="javascript:void(0)" onclick="download('中文.txt');">Down 中文.txt</a> 普通转向:<a href="a.txt">down.txt</a> </body> </html>
后台:
request.setCharacterEncoding("utf-8"); String filename = request.getParameter("filename"); filename = new String(filename.getBytes("ISO-8859-1"),"UTF-8"); System.out.println(filename); OutputStream o=response.getOutputStream(); byte b[]=new byte[1024]; /** * 得到文件的当前路径 * @param args */ String serverpath=request.getRealPath("\\"); File fileLoad=new File(serverpath+filename); response.setContentType("application/octet-stream"); response.setHeader("content-disposition","attachment; filename="+filename); long fileLength=fileLoad.length(); String length1=String.valueOf(fileLength); response.setHeader("Content_Length",length1); FileInputStream in=new FileInputStream(fileLoad); int n; while((n=in.read(b))!=-1){ o.write(b,0,n); } in.close(); out.clear(); out = pageContext.pushBody();
另附下载excel文件:
OutputStream o=response.getOutputStream(); byte b[]=new byte[1024]; File fileLoad=new File("e:/text.xls"); response.reset(); response.setContentType("application/vnd.ms-excel"); response.setHeader("content-disposition","attachment; filename=text.xls"); long fileLength=fileLoad.length(); String length1=String.valueOf(fileLength); response.setHeader("Content_Length",length1); FileInputStream in=new FileInputStream(fileLoad); int n; while((n=in.read(b))!=-1){ o.write(b,0,n); } in.close(); out.clear(); out = pageContext.pushBody();
区别仅仅是是内容类型的不同。
注意,如果在jsp页面中直接使用上述下载代码。 out.clear(); out = pageContext.pushBody(); 这两句不可少,为什么不加入了就报异常: java.lang.IllegalStateException: getOutputStream() has already been called for this response。因为pushBody()的作用是保存当前的out对象,并更新PageContext中Page范围内Out对象。至于为什么要加上这句话,是因为JSP容器在处理完成请求后会调用releasePageConter方法释放所有的PageContestObject,并且同时调用getWriter方法。由于getWriter方法与在JSP页面中使用流相关的getOutputStream方法冲突,所以会造成这种异常,解决方法就是楼上给的一样,只需要在JSP页面的最后加上这两条语句。
0 0
- java下载文件
- java 文件下载
- java 文件下载
- java下载文件
- java实现文件下载
- java 文件下载
- Java文件下载
- Java 网络文件下载
- java文件下载
- java 文件下载疑问
- java 文件下载 详解
- java文件下载
- Java 下载文件
- java 下载文件
- Java文件下载相关
- 文件下载(java) android
- java 文件下载
- java 文件下载
- 解决Eclipse中文字体太小的问题
- Android软键盘弹出时把布局顶上去的解决方法
- openstack neutron介绍
- 彻底理解 模拟频率、数字频率、模拟角频率
- 【智能硬件】打印机微信公众配置WIFI模块
- Java文件下载
- 51nod 1190 最小公倍数之和 V2(莫比乌斯反演)
- 【Android基础知识】AsyncTask基本使用
- 【目标检测】Faster RCNN算法详解
- 字符类的数字转化成数字类型
- sql server存储过程循环调用
- Leetcode 1. Two Sum (Easy) (cpp)
- 对面向对象的理解和this static的理解
- Android 提示超出64K的解决办法