servlet下载而不是在浏览器中显示文件
有时候,需要下载一个文件而不是在浏览器中显示它。比如gif图。一般情况下gif图是默认显示在浏览器中,但是有时,比如做一个wap下载图片到手机的功能,就需要下载这个文件而不是在浏览器中显示它。
做法很简单。需要对请求gif图的http响应(HttpServletResponse)头(header)做一些标示,这样浏览器就知道是要下载它而不是要显示它了。
最终需要的效果是:
写一个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图就都是下载了。
源代码见:
这篇文章上的评论的 RSS feed TrackBack URI