servlet下载而不是在浏览器中显示文件

有时候,需要下载一个文件而不是在浏览器中显示它。比如gif图。一般情况下gif图是默认显示在浏览器中,但是有时,比如做一个wap下载图片到手机的功能,就需要下载这个文件而不是在浏览器中显示它。

做法很简单。需要对请求gif图的http响应(HttpServletResponse)头(header)做一些标示,这样浏览器就知道是要下载它而不是要显示它了。

最终需要的效果是:

image

写一个Filter对请求做过滤即可:

package com.easymorse;

import java.io.IOException;

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.HttpServletResponse;

public class DownloadResourceFilter implements Filter {

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        response.setContentType(“application/x-download”);
        ((HttpServletResponse)response).setHeader(“Content-Disposition”, “attachment;filename=a.gif”);
        chain.doFilter(request,response);
    }

    @Override
    public void init(FilterConfig config) throws ServletException {
    }

}

然后在web.xml文件中配置这个Filter:

<filter>
    <filter-name>downloadResourceFilter</filter-name>
    <filter-class>com.easymorse.DownloadResourceFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>downloadResourceFilter</filter-name>
    <url-pattern>*.gif</url-pattern>
</filter-mapping>

 

这样在这个示例中,所有gif图就都是下载了。

源代码见:

http://easymorse.googlecode.com/svn/trunk/download.pic.demo

創建PDF格式    发送文章为PDF   

这篇文章上的评论的 RSS feed TrackBack URI

Leave a Reply