2010-12-13 28 views
0

Flash Builder 4(4.1フレックスあり)を使用して、プロンプトを表示せずに1つのファイルで動作するスクリプトを検出または変更しました。今私は複数のファイルをダウンロードして保存するためにそれを変更する必要があります。複数のファイルをurlStream + fileStreamでダウンロード

コードの作成者は配列を導入すると言いましたが、正確にはわからない方法です。 ボタンを1回押すと関数が開始され、関数は配列を読み込み、配列の最初の結果から定義された変数でコマンドを実行し、次にnextに変わります。
値は、ローカルまたはリモートの場所にないファイルの名前でのみ変更されます。

私はphpではこれを行う方法を知っていますが、フレックスではありません。誰でもこれを完了することができますか?

<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" width="400" height="200" 
        title="Updater" 
        showStatusBar="false"> 
<fx:Style source="Main.css"/> 
<fx:Script> 
    <![CDATA[ 

     protected function download_clickHandler(event:MouseEvent):void 
     { 
      var remoteFile = "http://domain/01.jpg"; 
      var localFile = "C:/01.jpg"; 

      var urlStream = new URLStream();     
      var request = new URLRequest(remoteFile);     

      var fileStream = new FileStream();     

      var file = File.desktopDirectory.resolvePath(localFile);     

      var writeFile = function() 
      { 
       // Write to file 
       if (urlStream.bytesAvailable > 51200) 
       { 
        var dataBuffer = new ByteArray(); 
        urlStream.readBytes(dataBuffer, 0, urlStream.bytesAvailable); 
        fileStream.writeBytes(dataBuffer, 0, dataBuffer.length); 
       } 
       return true; 
      }     

      var finishWriteFile = function() 
      { 
       if(urlStream.bytesAvailable > 0) 
       { 
        var dataBuffer = new ByteArray(); 
        urlStream.readBytes(dataBuffer, 0, urlStream.bytesAvailable); 
        fileStream.writeBytes(dataBuffer, 0, dataBuffer.length); 
       }      

       fileStream.close(); 
       urlStream.close(); 

       return true; 
      }     

      fileStream.openAsync(file, FileMode.WRITE); 
      urlStream.load(request);     

      urlStream.addEventListener(Event.COMPLETE, finishWriteFile); 
      urlStream.addEventListener(ProgressEvent.PROGRESS, writeFile); 
      } 
     } 
    ]]> 
</fx:Script> 

<mx:Image x="0" y="0" source="background.jpg"/> 
<s:Button x="85" y="85" label="Update" id="download" click="download_clickHandler(event)" color="#FFFFFF" fontSize="30"/></s:WindowedApplication> 

ありがとうございました!

答えて

2

これは私が今使っているものであり、動作します。誰でもどのようにそれが行われている問題を参照してください?

<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" width="400" height="200" 
         title=" Updater" 
         showStatusBar="false"> 
    <fx:Style source="Main.css"/> 
    <fx:Script> 
     <![CDATA[ 

     private function download_clickHandler(event:MouseEvent):void 
     { 
      var filearray:Array = new Array(); 
      filearray[0]="pregame.jpg"; 
      filearray[1]="01.jpg"; 
      filearray[2]="02.jpg"; 
      filearray[3]="03.jpg"; 
      filearray[4]="04.jpg"; 
      filearray[5]="05.jpg"; 
      filearray[6]="06.jpg"; 
      filearray[7]="07.jpg"; 
      filearray[8]="08.jpg"; 
      filearray[9]="09.jpg"; 
      filearray[10]="10.jpg"; 
      for (var i:uint; i < filearray.length; i++) { 
       var remoteURL = "http://www.domain.com/" + filearray[i]; 
       var localURL = "C:/dir/" + filearray[i]; 
       downloadFile(remoteURL, localURL); 
      } 

      function downloadFile(url, fileName) { 
       // Create the stream for the data request 
       var urlStream = new URLStream(); 

       // Used to initiate request for remote file 
       var request = new URLRequest(url); 

       // Create file stream 
       var fileStream = new FileStream(); 

       // Create a reference to a location on disk 
       var file = File.desktopDirectory.resolvePath(fileName); 

       // Called as download progresses 
       var writeFile = function() 
       { 
        // Write to file 
        if (urlStream.bytesAvailable > 51200) 
        { 
         var dataBuffer = new ByteArray(); 
         urlStream.readBytes(dataBuffer, 0, urlStream.bytesAvailable); 
         fileStream.writeBytes(dataBuffer, 0, dataBuffer.length); 
        } 
        return true; 
       } 

       // Called when download completes 
       var finishWriteFile = function() 
       { 
        // Write to file 
        if(urlStream.bytesAvailable > 0) 
        { 
         var dataBuffer = new ByteArray(); 
         urlStream.readBytes(dataBuffer, 0, urlStream.bytesAvailable); 
         fileStream.writeBytes(dataBuffer, 0, dataBuffer.length); 
        } 

        // Close streams 
        fileStream.close(); 
        urlStream.close(); 

        return true; 
       } 

       // Initiate download 
       fileStream.openAsync(file, FileMode.WRITE); 
       urlStream.load(request); 

       // Add event listeners 
       urlStream.addEventListener(Event.COMPLETE, finishWriteFile); 
       urlStream.addEventListener(ProgressEvent.PROGRESS, writeFile); 
      } 
     } 
    ]]> 
</fx:Script> 


<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 
<mx:Image x="0" y="0" source="background.jpg"/> 
<s:Button x="85" y="85" label="Update" id="download" click="download_clickHandler(event)" color="#FFFFFF" fontSize="30"/> 
+0

このコードをいただきありがとうございます! – Flex60460

関連する問題