2011-09-27 5 views
0

코드 흐름은 다음과 같습니다.flex 4 또는 flex 4.5에서 사용자 상호 작용없이 서버에서 파일을 다운로드하는 방법은 무엇입니까?

사용자가 페이지에서 '세부 정보 다운로드'버튼을 클릭하면 처리기가 RPC 메서드 호출을 s : CallResponder -> RPC 메서드를 사용하여 호출하면 URL을 생성하고 반환합니다. 어디서 파일을 다운로드 할 것인가?> CallResponder의 성공 이벤트 핸들러는 파일 다운로드에 FileRefrence.download()가 사용되지만 다음과 같은 오류가 발생하는 URL을 얻습니다. 팝업 윈도우를 디스플레이하는 것들은 마우스 클릭 또는 버튼 누름과 같은 사용자 상호 작용시에만 호출 될 수 있습니다. 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> 

파일의 FileReference가 INT 그의 사건이 일어나고 있지 않은 사용자 상호 작용을 필요로 이것을 달성하는 다른 방법이 있나요?

+0

사용자가 다운로드를 클릭하기 전에 다운로드 URL을로드 할 수 있습니까? – kreek

+0

사용자가 실제로 로컬에서 다운로드 할 위치를 지정해야하기 전에 파일을 다운로드 할 수 있습니다. 아아, 사용자의 컴퓨터에서 원하는 위치에 파일을 저장할 수는 없으므로 보안상의 주요 결함이 될 수 있습니다. –

답변

0

사용자가 다운로드 버튼 (예 : flex 응용 프로그램을 만든 후)을 클릭하기 전에 web_service.getURLDetails()을 호출하십시오. URL이로드 된 경우 downloadButtonClickHandler 메소드를 체크인하거나 비활성화 된 버튼으로 시작하여 URL로드 후 상태를 사용 가능으로 변경할 수 있습니다.

1

미리 파일을 사용할 수없는 경우 보안 제한으로 인해 FileReference을 통해 파일을 다운로드하는 방법이 있다고 생각하지 않습니다.

지금까지 내가이 시나리오를 처리 할 수있는 두 가지 옵션이 있습니다 알고 있어요 같이 별도의 버튼 클릭 (예를 들어, 경고 대화)을 통해

  1. 트리거 FileReference 다운로드;
  2. 이 도움이 navigateToURL(myURLRequest, "_self");

희망을 통해 브라우저의 표준 다운로드를 시작합니다.

0
var url:String = "test.xls"; 

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

fileReference.download(urlRequest);