2012-06-11 81 views
4

我是一个新的bie,我想要下载文件时用户点击下载选项它在浏览器中打开,而不是下载选项,如保存为/ open.Here我提到的相同和每个他们建议使用的地方如何让文件下载而不是在浏览器中打开?

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

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

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> 

这里下载其browser.I开放的点击需要用它来代替下载。 请帮我在如何使用或处理

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

在哪里添加上面我的要求,或者如果我可以与任何Java脚本做also.Please帮我解决以上。

+0

@Japs:你能帮我吗 – anto

+0

哦,我的天啊,我已经看过这个问题很多次了。 –

+0

@Derek:是的,但是如何根据我的要求执行 – anto

回答

-1

只是尝试添加页眉

response.setHeader( “内容类型:应用/武力下载”);

+0

:谢谢,但我不知道在哪里添加?我在控制器中添加它显示整个页面作为下载选项,我只想点击下载它应该导航到下载 – anto

0

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

假设页眉是图片/ png,那么浏览器会显示它。同样的方法,如果你发送相同的图像与应用程序/八位字节流,然后浏览器将强制下载它。

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

在一个项目中,我必须弄清楚,从浏览器发送请求是不同的。

如果你从Firefox或IE上传图片,那么它会以图片/ png的形式将它们上传,无论哪里chrome将它们作为application/octet-stream上传。

+1

可以请你根据我的要求建议。 – anto

+0

我不知道如何在Java中实现它。如果您更改Content-Type in response/octet-stream,那么浏览器肯定会强制下载它。看到我发现另一个问题在SO中http://stackoverflow.com/questions/186867/what-c​​ontent-type-to-force-download-of-text-response – ankit

+0

请任何人都可以帮我按我的要求。我知道我需要使用response.setHeader(“Content-Disposition”,“attachment; filename = _blank_”);但根据我的要求。请任何人可以阅读我的文章和帮助。我确切地说,我需要添加,我需要添加什么 – anto

5

这里是做这件事的一种方法:

  1. 创建Web Filter(或this way
  2. 地图这个过滤器的PDF URL。
  3. doFilter()方法中,设置内容下载的响应标头。

例子:

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堆栈相当标准。

+0

它应该可能是addHeader(),而不是addDateHeader()... :-) – yglodt

+0

@yglodt,谢谢。我纠正了它。 – Santosh

相关问题