1

我是 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 中,我在 url 中有很多用户名和相应的文件。单击下载文件在浏览器中打开,网址为 http://www.xxx.com/files/en/software/roshan.pdf

但我希望它在弹出窗口中打开,询问用户另存为/打开选项。当将此 url 传递给控制器​​时,我只得到值 /files/en/software/roshan.pdf。我在他们建议使用 response.setHeader("Content-Disposition", "attachment;filename="+name); 的每个地方都进行了搜索。

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

<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 中的相同文件(在上述控制器中包含/更改的内容)。请帮我解决这个问题。感谢我提前帮助我。

4

1 回答 1

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);

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

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

希望这可以帮助。

于 2013-04-19T11:51:14.813 回答