在JSP中下载文本文档

来源:互联网 发布:无标度网络幂律分布 编辑:程序博客网 时间:2024/05/16 12:10

 

通常,我们需要提供一个文件下载的时候,仅需要一个超链接就可以解决。
 
比如exe文件,鼠标左键点击链接就会提示你直接执行还是保存,右键则可以直接另存为。。。
 
但是有一部分文件,比如txt等可以在浏览器中直接打开的文件,你只能用鼠标右键点击链接然后另存为的方式去保存该文件,如果直接点击左键,该文件就在浏览器中被打开了。
 
在一些需求中,我们需要让txt拥有exe文件类似的动作,即左键点击时也让它提示保存还是打开。
 
网上很多文章都提到用jspsmartupload去做这件事情,smartupload当然是个好东西,可以用的时候尽管用,但是它并不是必须的,我们在jsp中可以直接设置response的Header (Content-Disposition) 来达到目的。下面是整个过程:
 
1)首先你要提供一个下载的链接,或者button,如:
<a href="download.jsp">文件下载</a>
<button type="submit" onClick="window.open('download.jsp')">文件下载</button>
总之,需要有一个方法跳转到实现文件下载的jsp或者servlet中。
 
2)在download.jsp(或者实现同样功能的servlet)中,代码如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%   
     /* 前半部分是获得server上webcontent的真实路径,
      * 因为获得一个FileInputStream必须使用"E:/webcontent/filename.txt"这种类型的真实路径,
      * 而不是"http://www.xxx.com/xxx/filename.txt"这种URL的形式。
      * dataname 是具体的文件相对于webcontent的路径 */
     String fullname = request.getSession().getServletContext().getRealPath("/") + dataname;
 
     // filename是保存时的默认文件名,经实验,在Firefox2和IE7中,这个文件名是有用的,在IE6中似乎没什么用,有兴趣的人再去研究研究吧
     String filename = fullname.substring(fullname.lastIndexOf('/'));   
     int i = 0;  
     response.setContentType("text/plain"); 
 
     // 关键是设置这个Header,否则还是会直接在浏览器中打开的
     response.setHeader("Content-Disposition","attachment;filename = " + filename);   
     java.io.FileInputStream fileInputStream = new java.io.FileInputStream(fullname);  
     while((i= fileInputStream.read()) != -1){  
         out.write(i);  
     }  
%> 
原创粉丝点击