如何下载文件而不是在浏览器中打开?

时间:2012-06-11 05:10:42

标签: java javascript html spring-mvc download

我是一个新的bie,我希望文件在用户点击下载选项时下载,在浏览器中打开,而不是下载选项,如另存为/ open.Here我引用的相同和他们建议使用的每个地方

Response.AddHeader("Content-disposition", "attachment; filename=" + Name);

但我不知道在哪里以及如何使用。 实际上,我从查询中获取url值,返回url作为存储在arraylist中的bean的对象之一(此列表还有其他值与url)。 我在arraylist中的url值就像bean一样

type=.pdf
release date=12/3/08
name=hai.pdf
url=/files/en/soft/doc/docs/hai.pdf

我在我的控制器中得到这个数组列表

ArrayList details = dao.getdetails(Bean.getNumber());

并将此视图传递到视图中

Map.put("details", details);
modelView.setViewName("details_list");
modelView.addAllObjects(Map);
return modelView;

在jsp中,我迭代了这个数组列表并像这样显示内容

Type    name            Release Date            
.txt    hai.pdf     May 21st 2012   Download

.txt    hello.txt   May 21st 2012   Download

下载我在jsp

中使用过这样的内容
<td colspan="2" valign="top">                           
<a href="${details.Url}"/>
<img src="/images/download.gif" alt="Download" border="0" align="right"></a>
</td>

点击下载在浏览器中打开它。我需要下载它。 请帮助我如何使用或处理

response.setHeader("Content-Disposition", "attachment;");

在哪里为我的要求添加以上内容,或者如果我也可以使用任何java脚本。请帮我解决上述问题。

3 个答案:

答案 0 :(得分:5)

这是一种方法:

  1. 创建网络Filter(或this way
  2. 将此过滤器映射到PDF URL。
  3. doFilter()方法中,设置内容下载的响应标头。
  4. 示例:

    public void doFilter(ServletRequest request, 
       ServletResponse response, FilterChain chain)
       throws IOException, ServletException {
    
              String name = request.getAttribute("filename");
    
               response.addHeader("Content-disposition", "attachment; filename=" + name);
               chain.doFilter(request, response);
    
    
    }
    

    您可以从控制器类中将文件名设置为请求属性(reqest.setAttribute())

    过滤器在Java Web堆栈中非常标准。

答案 1 :(得分:0)

这取决于浏览器响应的标题。

假设标题是image / png,那么浏览器会显示它。如果您使用application / octet-stream发送相同的图像,浏览器将强制下载它。

看看http://en.wikipedia.org/wiki/Byte_stream

在一个项目中,我发现从浏览器发送请求是不同的。

如果您从Firefox或IE上传图片,那么它会将它们上传为image / png,无论Chrome将其上传为application / octet-stream。

答案 2 :(得分:-1)

只是尝试添加标题

response.setHeader(“Content-Type:application / force-download”);