Как скачать файл с сервера без участия пользователя в flex 4 или flex 4.5? - PullRequest
0 голосов
/ 28 сентября 2011

Поток кода выглядит следующим образом:

пользователь нажимает кнопку «Загрузить информацию» на странице -> при обработке нажатия кнопки вызывается метод RPC с использованием s: CallResponder -> метод RPC генерирует ивозвращает URL-адрес, откуда загрузить файл -> обработчик события успеха CallResponder получает URL-адрес, по которому FileRefrence.download () используется для загрузки файла, но выдает следующую ошибку: -

Ошибка: ошибка # 2176: Некоторые действия, например те, которые отображают всплывающее окно, могут быть вызваны только при взаимодействии с пользователем, например, щелчком мыши или нажатием кнопки.на flash.net::FileReference/download()

Код выглядит следующим образом:

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

Есть ли другой способ добиться этого, так как File FileReference требует взаимодействия с пользователем, которое не происходит вего дело?

Ответы [ 3 ]

1 голос
/ 03 октября 2011

Я не думаю, что есть способ загрузить файл через FileReference из-за ограничений безопасности, если у вас нет файла, доступного заранее.

Насколько я знаю, есть два варианта для обработки этого сценария:

  1. Триггер FileReference загрузка с помощью отдельного нажатия кнопки (например, диалоговое окно оповещения);
  2. Инициировать стандартную загрузку браузера через navigateToURL(myURLRequest, "_self");

Надеюсь, это поможет.

0 голосов
/ 17 октября 2011
var url:String = "test.xls";

var fileReference:FileReference = new FileReference; 
var urlRequest:URLRequest = new URLRequest(url);
navigateToURL(urlRequest,"_new");

fileReference.download(urlRequest);
0 голосов
/ 28 сентября 2011

Вызвать web_service.getURLDetails() до того, как пользователь нажмет кнопку загрузки (например, после создания приложения flex). В методе downloadButtonClickHandler вы можете проверить, был ли загружен URL-адрес, или вы можете начать с отключенной кнопки и изменить статус на включенный после загрузки URL-адреса.

...