繁体   English   中英

将flex文件保存通过Web服务获取

[英]Save in flex a file get by web service

我正在使用针对Web应用程序的Flex 10。

我需要保存从Web服务在Flex中接收到的二进制文件。 为此,我需要使用FileReference.save() ,该请求必须由用户事件(鼠标或键盘)调用才能满足Flex的安全要求。 总体思路如下:

protected function cmdSave(event:MouseEvent):void{

    var inp:String = webService.getString("fieldBinary"); //here I get the data
    var base64Dec:Base64Decoder = new Base64Decoder();
    base64Dec.decode(inp);
    var byteArray:ByteArray = base64Dec.toByteArray();

    var fileRef:FileReference = new FileReference();
    fileRef.save(byteArray, "output.pdf");
}

现在我的问题是,使用Web服务的方法是同步的。 因此,我的原始函数应该一分为二,并且对FileReference.save()的调用不是在用户事件触发的函数中执行,而是在由Web服务触发的函数中执行,例如:

protected function cmdSave(event:MouseEvent):void{

    responseFunction=cmdSave_End;
    methodToCallWebService(responseFunction);
}

protected function cmdSave_End(event:Ws_Event):void{

    var webService = Ws_event.getResult();
    var inp:String = webService.getString("fieldBinary"); //here I get the data
    var base64Dec:Base64Decoder = new Base64Decoder();
    base64Dec.decode(inp);
    var byteArray:ByteArray = base64Dec.toByteArray();

    var fileRef:FileReference = new FileReference();
    fileRef.save(byteArray, "output.pdf");
}

(我省略了大部分代码)

这时,FileReference引发此错误:

错误#2176:某些操作(例如显示弹出窗口的操作)只能在用户交互时调用,例如通过单击鼠标或按下按钮。

有人会想办法解决这个问题吗? 我需要在用户调用的函数中运行FileReference。

提前致谢。

您可以通过强迫用户单击某些按钮并仅在那时将其保存在磁盘上来欺骗它。

我要做的是显示一条警告消息,告诉用户文件已成功生成,并在警告句柄功能上调用save方法。

private var _byteArray:ByteArray;

protected function cmdSave(event:MouseEvent):void
{
    responseFunction=cmdSave_End;
    methodToCallWebService(responseFunction);
}

protected function cmdSave_End(event:Ws_Event):void{

    var webService = Ws_event.getResult();
    var inp:String = webService.getString("fieldBinary"); //here I get the data
    var base64Dec:Base64Decoder = new Base64Decoder();
    base64Dec.decode(inp);
    _byteArray = base64Dec.toByteArray();

    Alert.show("File content was generated", "Info",   Alert.OK, this, alertClickHandler);

}


// Event handler function for Alert
private function alertClickHandler(evt:CloseEvent):void 
{
    var fileRef:FileReference = new FileReference();
    fileRef.save(_byteArray, "output.pdf");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM