• 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 chainthrows IOException, ServletException {
            
            HttpServletRequest hreq = (HttpServletRequestrequest;  
            HttpServletResponse hresp = (HttpServletResponseresponse
            
            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 arg0throws ServletException {
            this.filterConfig = arg0;
        }

    }

  • 相关阅读:
    解决express不是内部或外部命令
    spring ioc认识
    Filter编码过滤
    call、apply、bind
    js面向对象浅析
    由clientWidth到document
    401
    删除页面中Form下面隐藏的ViewStatue
    asp.net 下载
    day98
  • 原文地址:https://www.cnblogs.com/syxchina/p/2197243.html
Copyright © 2020-2023  润新知