我目前正在开发Flex3 / blazeDS / Spring / Oracle项目。我的要求是在网格中显示来自外部FTP服务器的文件列表,用户可以选择单个文件或多个文件进行下载,如果用户选择多个文件,我应该tar FTP服务器上的文件并从FTP下载tar文件服务器到用户磁盘。根据我对Flex中的文件下载的理解,我们有两种方法可以做到这一点。 1)文件参考2)使用navigateURL和调用服务器端JSP / Servlets来下载文件。
1)对于FileReference,我们需要先下载数据,然后通过单击某个按钮提示用户保存文件。在Flex(Workaround)中出于安全原因,我们无法在没有点击事件的情况下提示“保存”对话框。但我的客户讨厌这个过程,因为它有两个步骤,他只需一步就像普通的文件下载一样只需要“保存”对话框。然后我尝试了第二个选项。
2)navigateURL。打开一个新窗口,为JSP / Servlets发出一个post url请求,并提示“保存”对话框。我在这里遇到的问题是下载完成后弹出窗口没有关闭。 navigateURL不会返回任何对窗口的引用来关闭窗口。我甚至尝试过不同的内容类型和标题以及java脚本,但似乎都没有。当窗口是单个文件而不是tar或zip文件时窗口关闭。我想下载任何类型下载的弹出窗口。我正在使用IE7。
任何帮助或任何其他可能的解决方案表示赞赏。提前谢谢。
答案 0 :(得分:1)
您可以使用隐藏的iframe。这样就没有涉及弹出/新选项卡,只有“保存”对话框。
要执行此操作,您需要在页面上使用一些JavaScript。这样的事情应该这样做:
<script language="JavaScript" type="text/javascript">
function makeFrame(theUrl) {
ifrm = document.createElement("IFRAME");
ifrm.setAttribute("src", theUrl);
ifrm.style.width = 640+"px";
ifrm.style.height = 480+"px";
document.body.appendChild(ifrm);
}
</script>
要从Flex调用该函数,请使用ExternalInterface