如何在flex 4或flex 4.5中无需用户交互即可从服务器下载文件



代码流程如下:

用户单击页面上的"下载详细信息"按钮->在按钮上单击处理程序,使用s调用RPC方法:CallResponder -> RPC方法生成并返回下载文件的URL -> CallResponder的成功事件处理程序获取FileRefrence.download()用于下载文件的URL,但抛出以下错误:-

Error: Error #2176:某些操作,例如那些显示弹出窗口的操作,可能只能在用户交互时调用,例如通过单击鼠标或按下按钮。在flash.net: FileReference/下载()

代码如下:

<fx:Script>
    <![CDATA[            
        import mx.rpc.CallResponder;
        import mx.rpc.events.FaultEvent;
        import mx.rpc.events.ResultEvent;
        protected function downloadButtonClickHandler(event:MouseEvent):void 
        { 
                var web_service:IWeb_service = Web_service.getInstance(); 
                getDetails.token = web_service.getURLDetails();
        } 
        public function onGetDetailsResult(event:ResultEvent):void
        {
            var response:URLResponse = event.result as URLResponse;
            if(response != null && response.url != null)
            { 
                var request:URLRequest = new URLRequest(response.url);
                fileReference.download(request, "test.html");
            }
        }
        public function onGetDetailsFault(event:FaultEvent):void
        {
            Alert.show("Error in downloading details");
        }
    ]]>    
</fx:Script>
<fx:Declarations>  
    <net:FileReference id="fileReference" />
    <s:CallResponder id="getDetails" result="onGetDetailsResult(event)" fault="onGetDetailsFault(event)"/>
</fx:Declarations>
<s:HGroup width="100%" height="100%">
       <s:Button label="Download Details" id="downloadButton" 
                          click="downloadButtonClickHandler(event)" /> 
</s:HGroup>

有没有其他的方法来实现这个文件FileReference需要一个用户交互,而不是发生在他的情况下?

我认为没有办法通过FileReference下载文件,由于安全限制,如果你事先没有文件可用。

据我所知,有两个选项来处理这种情况:

  1. 触发FileReference下载通过单独的按钮点击(例如警报对话框);
  2. 通过navigateToURL(myURLRequest, "_self");启动浏览器标准下载

var url:String = "test.xls";
var fileReference:FileReference = new FileReference; 
var urlRequest:URLRequest = new URLRequest(url);
navigateToURL(urlRequest,"_new");
fileReference.download(urlRequest);

在用户单击下载按钮之前调用web_service.getURLDetails()(例如在创建flex应用程序之后)。你可以在downloadButtonClickHandler方法中检查url是否被加载,或者你可以从一个禁用按钮开始,并在url被加载后将状态更改为启用。

相关内容

  • 没有找到相关文章

最新更新