使用JSP实现文件下载
- 格式:pdf
- 大小:89.69 KB
- 文档页数:2
本文只想告诉jsp的初学者,如何轻松实现文件下载功能,在代码实现上只涉及最核心部分
的实现,一些修饰性的实现尽量会简略。
下面共3中文件下载的方式,运行index.jsp可以查看到显示效果。
建立文件index.jsp
类型,如txt类型)
从服务器上直接下载文件(比较不能再IE中直接打开的文档类型,
如doc类型)
建立文件download1.Jsp
<%@ page contentType="text/html; charset=GBK"%>
<%@ page import="javax.servlet.RequestDispatcher"%>
<%
//从服务器上直接打开文件
String realFile = "/file/复件 1.txt";
String fileName = "复件 1.txt";
response.setContentType("APPLICATION/OCTET-STREAM");
response.addHeader("Content-Disposition", "attachment;filename="
+ java.net.URLEncoder.encode(fileName, "UTF-8"));//避免名字乱码的
try {
RequestDispatcher dis = application
.getRequestDispatcher(realFile);//是请求转发,前后页面共享一个request ,
返回的是一个RequestDispatcher对象; response.sendRedirect()是重新定向,前后页面不是一
个request。
if (dis != null) {
dis.forward(request, response);//是在服务器端运行,对于浏览器来说是“透明
的”; HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成.
}
response.flushBuffer();//清缓冲区
out.clear();//清缓冲区,保存当前的out对象,并更新PageContext中Page范围内Out
对象
out = pageContext.pushBody();//清缓冲区
} catch (Exception e) {
e.printStackTrace();
} finally {
}
%>
建立文件download2.Jsp
<%@ page contentType="text/html;charset=GBK"%> <% // 实现从服务器上下载文件
String filename ="1.doc";//文件名
String filepath = "G:\\ApacheTomcat5528t3\\webapps\\gw\\file\\2011年测试
工作小结.doc";//文件在服务器上的路径
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition","attachment; filename=\"" +
java.net.URLEncoder.encode(filename, "UTF-8") + "\"");
java.io.FileInputStream inStream =new java.io.FileInputStream(filepath);
byte[] b = new byte[1024];
int len;
while((len=inStream.read(b)) >0)
response.getOutputStream().write(b,0,len);
response.getOutputStream().close();
inStream.close();
out.clear();//清缓冲区,保存当前的out对象,并更新PageContext中Page范围内Out
对象
out = pageContext.pushBody();//清缓冲区
%>
建立文件download3.Jsp
<%@ page contentType="text/html;charset=GBK"%>
<%//直接写入内容生成文件
String filename ="1.txt";//将Hello Stream这个字符串写入了response对象的输
出流并生成这个文件
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition","attachment; filename=\"" +
filename + "\"");
String tmpStr = "Hello Stream";
byte[] b = tmpStr.getBytes();
int len = b.length;
response.getOutputStream().write(b,0,len);
response.getOutputStream().close();
%>