2

我有一个 Servlet,它制作并返回一个 zip 文件 像这样

 response.setHeader("Pragma","Public");
            response.setHeader("Cache-Control","must-revalidate,post-check=0,pre-check=0");

            response.setContentType("application/octet-stream");

            response.setHeader("Expires", "0");
            response.setHeader("Content-Transfer-Encoding", "binary");
            if(file.getName().contains("–")){
                response.setHeader("Content-Disposition", "inline; filename=\"file.zip\"");
            }

            OutputStream os = response.getOutputStream();
            ZipOutputStream zos = new ZipOutputStream(os);
            for (File f : files) {
                //add files, it's working...
                }
                bis.close();
                fis.close();
                zos.closeEntry();
            }
            zos.flush();
            zos.close();
            os.flush();
            os.close();

目前要下载我使用的是 iframe,所以我设置了 src 属性来开始下载。调用此函数时加载下载帧

function loadIDownloadFrame(url) {
    document.getElementById("idownloadFrame").src=url;
}

但是现在,我需要在不离开当前页面的情况下返回 zip 文件后显示一条消息。我需要知道 servlet 是否返回了 zip 文件。

我尝试使用“window.frames['idownloadFrame'].document.readyState”获取 iframe 状态,但状态始终为“完成”。

任何人有任何解决方案?

4

1 回答 1

1

我认为您可以直接参考映射 Servlet 的下载链接(它返回可下载的二进制文件)。如果您在映射的 servlet 中设置适当的标头以返回二进制文件,它不会更改页面,从代码片段看起来您已经这样做了。为什么必须在不同的 iframe 中下载文件?你不一定需要那个。

您必须在哪里显示消息?像 JavaScript 警报之类的?

于 2012-11-26T13:23:33.320 回答