2012-03-24 78 views

回答

6

的URLRequest和URLLoader將允許您從互聯網上獲取一些數據文件流允許你保存在本地(一個FileReference如果你希望他們選擇在哪裏保存它)在

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" 
         creationComplete="windowedapplication1_creationCompleteHandler(event)"> 
    <fx:Script> 
     <![CDATA[ 
      import mx.events.FlexEvent; 

      protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void 
      { 
       // TODO Auto-generated method stub 
       var urlLoader:URLLoader = new URLLoader(); 
       urlLoader.addEventListener(Event.COMPLETE, complete_handler); 
       urlLoader.dataFormat = URLLoaderDataFormat.BINARY; 
       urlLoader.load(new URLRequest("http://www.shaunhusain.com/CheckboxList/CheckboxList.swf")); 

      } 

      private function complete_handler(event:Event):void 
      { 
       var data:ByteArray = event.target.data; 

       var fr:FileReference = new FileReference(); 
       fr.save(data, 'test.swf'); 

       var fileStream:FileStream = new FileStream(); 
       trace(File.applicationDirectory.nativePath); 
       fileStream.open(new File(File.applicationDirectory.nativePath+"\\test.swf"),FileMode.WRITE); 
       fileStream.writeBytes(data, 0, data.length); 
      } 
     ]]> 
    </fx:Script> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
</s:WindowedApplication> 

編輯: AS3移動項目版本:

package 
{ 
    import flash.display.Sprite; 
    import flash.display.StageAlign; 
    import flash.display.StageScaleMode; 
    import flash.events.Event; 
    import flash.filesystem.File; 
    import flash.filesystem.FileMode; 
    import flash.filesystem.FileStream; 
    import flash.net.FileReference; 
    import flash.net.URLLoader; 
    import flash.net.URLLoaderDataFormat; 
    import flash.net.URLRequest; 
    import flash.utils.ByteArray; 

    public class DownloadFileMobileAS3 extends Sprite 
    { 
     public function DownloadFileMobileAS3() 
     { 
      super(); 

      // support autoOrients 
      stage.align = StageAlign.TOP_LEFT; 
      stage.scaleMode = StageScaleMode.NO_SCALE; 
      createLoader(); 
     } 
     protected function createLoader():void 
     { 
      // TODO Auto-generated method stub 
      var urlLoader:URLLoader = new URLLoader(); 
      urlLoader.addEventListener(Event.COMPLETE, complete_handler); 
      urlLoader.dataFormat = URLLoaderDataFormat.BINARY; 
      urlLoader.load(new URLRequest("http://www.shaunhusain.com/CheckboxList/CheckboxList.swf")); 

     } 

     private function complete_handler(event:Event):void 
     { 
      var data:ByteArray = event.target.data; 

      var fr:FileReference = new FileReference(); 
      fr.save(data, 'test.swf'); 

      var fileStream:FileStream = new FileStream(); 
      trace("something"); 
      trace(File.applicationDirectory); 
      trace(File.applicationDirectory.nativePath); 
      trace(File.applicationStorageDirectory.nativePath); 
      fileStream.open(new File(File.applicationStorageDirectory.nativePath+"\\test.swf"),FileMode.WRITE); 
      fileStream.writeBytes(data, 0, data.length); 
     } 
    } 
} 

我在上面的代碼中都包含了兩個選項,您可能要麼取出文件引用部分,要麼取出文件流部分,否則會保存兩次。

我剛剛添加了移動部分,它實際上確實有一些對話框,它會提示您在Android上保存文件,雖然這是一個我以前從未見過的對話框,只是讓您可以選擇在何處將其保存爲音頻文件,圖像文件和視頻文件作爲選項或默認位置/mnt/sdcard/test.swf。我讓它保存在那裏,並能夠使用ES Explorer查看它(儘管我沒有很好的方法來驗證數據是否完整,但通常是正確的)。一個使用applicationDirectory的人對我失敗了,追蹤出來我沒有看到nativePath,所以我把它切換到了applicationStorageDirectory,它有一個值,它似乎保存了沒有錯誤,不幸的是它在我的根/數據文件夾中,我的手機根深蒂固,我無法完全確認文件是否存在,但沒有錯誤。讓我知道你是否已經嘗試了這個以及你還遇到了什麼具體問題。

+1

感謝您的幫助,但我使用這段代碼的閃光我做了一切,以適應閃光,但沒有working.If你知道如何使這個代碼閃存請幫助.. – 2012-03-25 07:45:53

+0

嘿Pabo,除了應用程序作爲容器並使用創建完成事件我不認爲我真的依賴於Flex中的任何工作,它應該都在Flash中可用...我將製作一個Flash移動項目並將其扔掉在那裏看看我是否遇到任何問題,但我能想到的唯一的問題可能是使用文件引用,因爲我不知道它在移動平臺上如何工作,通常它會請求特定於操作系統的彈出窗口選擇一個文件或一個位置來保存,但沒有內置的文件系統瀏覽器,我知道在Android或iOS上。 – shaunhusain 2012-03-25 23:26:19

+0

我更新了我的答案,同時注意到我在創建項目時選中了允許寫入外部存儲器,以便將其添加到-app.xml文件並最終在設備上安裝apk。 – shaunhusain 2012-03-26 00:23:17