Spring Framework |强制浏览器下载文件而不重定向到新页面

时间:2013-06-26 04:22:33

标签: ajax spring redirect download modelandview

我正在使用Spring 3.x库创建这个应用程序。现在,我们有一个下载页面,其中包含'n'个链接,其中'n'通常大于10。 我所做的是我创建了一个URL模式,如:

/sec-download.do?p=10001

单击下载链接会调用执行某些验证的控制器,然后生成可由浏览器下载的有效CDN链接。以下是示例代码段:

protected ModelAndView handleRequestInternal(final HttpServletRequest request, final HttpServletResponse response) throws Exception {
    final Map<String, Serializable> secureAssetModel = new HashMap<String, Serializable>();
    String downloadComponent = getRequestHelper().getStringParameterOrAttribute(request, ExtWebConstants.REQUEST_PARAM_DOWNLOAD_COMPONENT, "");
    ModelAndView resultView = null;
    if (downloadComponent == StringUtils.EMPTY) { // For regular web downloads.
        String requestParamsEncoded = getServetRequestHelper().getStringParameterOrAttribute(request, ExtWebConstants.REQUEST_PARAM_DOWNLOAD, "");
        String requestParamsDecoded = new String(Base64.decode(requestParamsEncoded.getBytes()));
        <snip>......<snip>
        <snip>......<snip>
        <snip>......<snip>
        resultView = getWebResultView(errorType, requestParamsDecoded, request);
    } 
    return resultView;
}

private ModelAndView getWebResultView(final DownloadErrorType errorType, final String requestParamsDecoded, final HttpServletRequest request) {
    ModelAndView resultView = null;
    final Map<String, Serializable> secureAssetModel = new HashMap<String, Serializable>();
        String downloadURL = downloadService.getEvalDownloadLink(filePath);
        <snip>......<snip>
        <snip>......<snip>
        <snip>......<snip>
        resultView = new ModelAndView("redirect:" + downloadURL);
        return resultView;
}

方法getWebResultView()的变量downloadURL获取实际的下载链接(http://download.xyz.com/xxx.exe?p=111),该链接作为重定向URL包装在ModelAndView中。这个modelandView最终从方法handleRequestInternal()返回。

现在,问题在于对于FF和Chrome,一旦我点击下载链接,浏览器下载弹出窗口就会打开并要求用户保存它(所有这些时间都在同一页面上)。 但是,在Internet Explorer上,视图会重定向到另一个页面,然后开始下载。这意味着要下载下一个文件,用户必须点击浏览器后退按钮并开始下一次下载。

我知道这可能是因为我实际上是重定向到下载网址。想知道我是否可以在MSIE中使用类似于FF和chrome的行为,以便它可以在停留在同一页面时下载文件?

非常感谢任何投入。 问候。

0 个答案:

没有答案