JSP中附件下载和浏览器查看方法
在做CMS、BBS等系统中,会有发表文章模块,而文章中会有附件和图片,当点击附件时可能会出现保存对话框和浏览器直接打开,例如类似这样的连接:/zlgc/admin/uploadAttach/20110409/20110409145547_708.doc。这种保存或打开在不同的浏览器表现不一,当然我们也可以统一这种行为,使用J2EE中的filter,过滤每个下载连接,在给每个请求回应response的http添加这是个附件的header,就可以了,核心语句:
<%@ page contentType="application/msword;charset=utf8" %>
<!-- 以上这行设定本网页为Word格式的网页 -->
<%
//response.setHeader("Content-disposition","inline; filename=test1.doc"); //线上浏览方式,用IE打开
response.setHeader("Content-disposition","attachment; filename=test1.doc");//下载方式,下载,不用浏览器打开
//以上这行设定传送到前端浏览器时的档名为test1.doc
//就是靠这一行,让前端浏览器以为接收到一个word文档
%>
操作步骤:
1、在项目中建立普通的java文件,作为filter处理体。
2、修改filter,使其实现 javax.servlet.Filter 接口,实现接口中的三个方法 init、doFilter、destroy 。
3、 配置xml,加入filter过滤器。
<filter>
<filter-name>AttachFilter</filter-name>
<filter-class>Servlet.AttachFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AttachFilter</filter-name>
<url-pattern>/admin/uploadAttach/*</url-pattern>
</filter-mapping>
4、重启tomcat。
注意:filter的执行顺序是按xml中顺序。
详细java代码:
package Servlet;
import java.io.IOException;
import java.util.Date;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AttachFilter implements Filter {
private FilterConfig filterConfig = null;
public void destroy() {
filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest hreq = (HttpServletRequest) request;
HttpServletResponse hresp = (HttpServletResponse) response;
System.out.println(new Date() + " filter");
String url = hreq.getRequestURI();
String fileName = url.substring(url.lastIndexOf('/')+1);//获取要下载的文件名
System.out.println(hreq.getRequestURI());
System.out.println(fileName);
hresp.setHeader("Content-disposition","attachment; filename="+fileName);
//hresp.addHeader("Content-disposition","attachment; filename="+fileName);
chain.doFilter(hreq, hresp);
}
public void init(FilterConfig arg0) throws ServletException {
this.filterConfig = arg0;
}
}
作者:BuildNewApp
出处:http://syxchina.cnblogs.com、 BuildNewApp.com
本文版权归作者、博客园和百度空间共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则作者会诅咒你的。
如果您阅读了我的文章并觉得有价值请点击此处,谢谢您的肯定1。