当返回要下载的zip文件(字节数组)时,ie7和ie8阻止下载,并表示"帮助保护您的bla-bla"。然后当我点击这个栏并点击"下载文件"。页面重新加载后,无法开始下载。因为我的下载只有在点击链接时才开始。
firefox没有问题。我只知道是怎么发现这种情况的?
告诉你这个系统是如何工作的:
我的下载链接:
<a href="javascript:" onclick="getSelectedCheckBoxes();downloadForm.submit()">downloadr</a>
单击此链接后,我将在ProcessAction中执行一些操作,然后portlet返回到jsp。在jsp中,下面的代码转发到为下载服务的servlet:
location.href="<%=request.getContextPath()%>/ZipDownloadServlet?cacheKey=blabla"
问题是您试图下载的资源不是幂等的(即,它不是GET,而是应该启动下载的POST。为了解决IE的这个问题,我建议在POST和下载之间设置重定向,因此
- POST准备下载(可能检查POSTed参数,等等)
- 然后使用具有CCD_ 1报头的HTTP 303响应代码重定向到可以通过GET请求资源的(临时)URL
- 当IE决定要向用户请求权限,然后再次获取时,这是没有问题的,因为你的资源是幂等的,可以根据IE的喜好下载
您必须确保仅在用户启动的事件处理程序(通常是页面中的"点击"事件)中发出文件下载的HTTP请求。(事实上,可能只有点击事件才有效;我没有费心去调查,因为几乎总是会有"点击"。)
您无法阻止浏览器以这种方式运行。