如何从url下载文件? (不要在浏览器中打开)

时间:2012-06-12 03:25:40

标签: java jsp spring-mvc download

我是java新手。我需要点击下载选项下载pdf / txt / .xls或任何文件。 在我的情况下,我在数组列表中有一些值并在jsp中显示。 在我的名单(名单)中,我有

name=rahul
url=files/en/software/rahul.txt
name=roshan
url=files/en/software/roshan.pdf

当我迭代(名单)并在jsp中显示上面的内容时,我的jsp

<td valign="top">${namelist.name}</td>

<td colspan="2" valign="top">                           
<a href="${namelist.url}"/>
<img src="/images/download.gif" alt="Download" border="0" align="right"></a><br/><br/>
</td>

所以我的jsp iam在url中有很多用户名和相应的文件。 点击下载后,文件将在浏览器中打开并显示url http://www.xxx.com/files/en/software/roshan.pdf

但我希望打开这个弹出窗口,要求用户将另存为/ open选项。 当这个url传递给控制器​​时,我只得到值/files/en/software/roshan.pdf。 我在他们建议使用的每个地方搜索过相同的内容 response.setHeader(“Content-Disposition”,“attachment; filename =”+ name);

所以我创建了一个名为download的控制器,点击下载我就像这样映射了网址

<a href='<c:url value="/download.sp?name=${namelist.name}&downloadUrl=${namelist.url}"/>'>
<img src="/images/download.gif" alt="Download" border="0" align="right"></a><br/><br/>

这是我的控制器。 我不知道该做什么,我写得像这样

public ModelAndView download(HttpServletRequest request, HttpServletResponse response) throws Exception {
        cat.debug(" download: begin");
        ModelAndView modelView = super.handleRequest(request, response);
        String url = request.getParameter("downloadUrl");
        String name = request.getParameter("name");
        response.setHeader("Content-Disposition", "attachment;filename="+name);
        String viewName = "swl_download";
        modelView.setViewName(viewName);
        return modelView;
}

以上是打开同名的弹出窗口。我想在控制器中包含更多内容,以便点击下载时文件应该是url中的相同文件(在上面的控制器中包含/更改的内容)。 请帮我解决这个问题。谢谢我提前帮助我。

1 个答案:

答案 0 :(得分:1)

需要查看sql_download视图正在执行的操作。

通常,我在视图中设置内容处置。所以我的自定义AbstractView实现看起来像:

response.setHeader("Content-disposition", "attachment; filename="+fileName); response.setContentType("application/vnd.ms-excel"); OutputStream out = response.getOutputStream(); helperClass.exportDataToExcel(data, out);

内容类型也很重要,可帮助您的浏览器选择正确的应用程序来加载文档。

你应该知道这些标题只是对浏览器的建议,浏览器可以自己解释它们。因此,您将无法强制所有浏览器显示“打开或保存”对话框。

希望这有帮助。