提问者:小点点

使用ajax下载生成的excel文件


我正在使用struts2框架开发一个应用程序。当用户提供日期范围时,我需要准备报告excel文件并在下载弹出窗口中显示。我能够创建excel的io流,但我不知道如何使用ajax打开该弹出窗口。

我正在动态生成文件并返回流。因此无法给出文件路径。我希望ajax调用显示一些消息,如“请稍候…”。因为文件生成需要更多时间,看起来链接不起作用…


共3个答案

匿名用户

下载文件与Ajax无关。

您的请求可以是ajax请求,但只需给出生成的文件路径,浏览器就会进行下载。

匿名用户

无需执行任何AJAX调用。

您只需要将byte[]作为Struts2Stream结果返回,并配置了ContentDispo:附件;(而不是ContentDispospos: inline,这将尝试在浏览器中打开它,而不是询问下载或使用桌面应用程序打开)。

要通知用户正在发生某事、请求已发送并且系统未冻结,您需要Loding OVERLAY

Overlay是放置在您的页面上的元素,通常具有部分透明的背景、显示“加载中…”的动画图像和模态行为(它不会关闭,直到页面更改,它将防止重复发布相同的请求,如双击等…)。

当然,如果你打开一个附件,页面不会改变,那么你需要拦截下载结束并自己关闭覆盖层,或者给用户一个按钮来关闭它。

要拦截它,您可以尝试Struts2执行和等待拦截器

如果要创建自定义覆盖,可以使用ajaxload.infoGenerator生成加载图像。

如果您不想重新发明轮子,您可以查看现有的覆盖层,例如jQuery TOOLS中的覆盖层。

匿名用户

在ajax的成功方法上,不要返回流,而是将文件保存在服务器上,并打开一个带有返回正确文件的操作地址的弹出窗口。但是弹出窗口可能会在某些浏览器中被阻止,因此您需要允许您的站点(本地主机或其他URL)