簡體   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