我有一个制作并返回zip文件的Servlet 像这样的东西
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状态,但始终状态为“完成”。
有人有任何解决方案吗?
答案 0 :(得分:1)
我认为您可以直接引用映射Servlet的下载链接(返回可下载的二进制文件)。如果您在映射的servlet中设置适当的标头以返回二进制文件,它将不会更改页面,从代码片段看起来您已经这样做了。为什么必须在不同的iframe中下载文件?你不一定需要它。
你必须在哪里显示消息?像JavaScript提醒或其他什么?