4

我是一个新手,我希望在用户单击下载选项时下载文件,它在浏览器中打开,而不是像另存为/打开这样的下载选项。在这里,我提到了相同的以及他们建议使用的每个地方

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 脚本。请帮助我解决上述问题。

4

3 回答 3

5

这是一种方法:

  1. 创建一个网络过滤器(或这种方式
  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 堆栈中是相当标准的。

于 2012-06-11T07:43:58.343 回答
0

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

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

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

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

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

于 2012-06-11T05:35:17.493 回答
-1

只是尝试添加标题

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

于 2012-06-11T05:15:18.653 回答