1

我正在使用 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 中。这个模型和视图最终从方法 handleRequestInternal() 中返回。

现在,这里的问题是,对于 FF 和 Chrome,一旦我点击下载链接,浏览器下载弹出窗口就会打开并要求用户保存它(一直停留在同一页面上)。然而,在 Internet Explorer 上,视图被重定向到另一个页面,然后开始下载。这意味着要下载下一个文件,用户必须点击浏览器的返回按钮并开始下一个下载。

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

将不胜感激任何投入。问候。

4

0 回答 0