2013-01-04 3 views
0

이 게시물의 코드 link here을 사용하여 원격 SWF 파일을 디스크로 다운로드합니다.파일 목록을 반복하고 다운로드 - 마지막으로 저장 한 파일 만

나는 3 개의 SWF 파일을 나열하는 XML 파일을 가지고 있으며 각 루프마다이를 통과시키기 위해 a를 사용하고 있습니다. 이름을 추적하면 3 개의 고유 한 파일 이름이 모두 표시됩니다.

각 루프마다 파일 다운로드 코드를 사용하면 목록의 마지막 파일 만 저장됩니다.

내 정확한 코드 : 나는 어떻게 든이 ByteArray 밖으로 삭제되지 않는, 또는 내가 파일 당이 ByteArray를 사용할 필요가

function onPlaylistComplete(e:Event) 
{ 
    var List:XML = new XML(e.target.data); 
    trace("List : " + List); 

    for each(var item in List.playlist_ads.ad.ad_file_path) 
    { 
     var urlString:String = site_url + "/" + item; 
     var urlReq:URLRequest = new URLRequest(urlString); 
     var urlStream:URLStream = new URLStream(); 

     urlStream.addEventListener(Event.COMPLETE, loaded); 
     urlStream.load(urlReq); 

     function loaded(event:Event):void 
     { 
      var fileData:ByteArray = new ByteArray(); 
      urlStream.readBytes(fileData, 0, urlStream.bytesAvailable); 
      writeBinaryFile(item, fileData); 
     } 


    } 
} 

function writeBinaryFile(name : String, array : ByteArray) : void { 
    try { 
     var f : File = File.documentsDirectory.resolvePath(name); 
     var fs : FileStream = new FileStream(); 
     fs.open(f, FileMode.WRITE); 
     fs.writeBytes(array); 
     fs.close(); 
     trace(f.nativePath + " written."); 
    } 
    catch (err : Error) { 
     trace(err.name); 
    } 
} 

을 생각하고 있어요?

희망 하시겠습니까?

업데이트 - 루프에서 완료 이벤트 처리기를 가져 와서 같은 문제가 계속 발생하여 마지막 파일 이름이 사용 중이며 다음 코드를 시도했습니다. 지난 몇 시간 동안 여러 가지 일을 시도해 왔습니다.

for(i = 0; i < adArray.length; i++) 
    { 
     var swfItem = adArray[i]; 
     var urlString:String = site_url + "/" + adArray[i]; 
     var urlReq:URLRequest = new URLRequest(urlString); 
     var urlStream:URLStream = new URLStream(); 

     urlStream.addEventListener(Event.COMPLETE, urlStreamComplete); 
     urlStream.load(urlReq); 


    } 
    function urlStreamComplete(event:Event):void 
     { 
      var fileData:ByteArray = new ByteArray(); 
      var stream = event.target; 
      stream.readBytes(fileData, 0, stream.bytesAvailable); 
      try { 
       var f : File = File.documentsDirectory.resolvePath(swfItem); 
       var fs : FileStream = new FileStream(); 
       fs.open(f, FileMode.WRITE); 
       fs.writeBytes(fileData); 
       fs.close(); 
       trace(f.nativePath + " written."); 
      } 
      catch (err : Error) { 
       trace(err.message); 
      } 
     } 

답변

0

먼저로드 된 함수를 루프 외부로 이동하면 이제 여러 번 선언됩니다. 당신의 문제에 관해서는; 로드 된 함수에서 루프 내에서 할당되는 urlStream을 참조하고 있습니다. 루프의 끝에서로드 된 메소드에 의해 사용되는 마지막 항목으로 스트림을 보유합니다. 로드 된 함수에 전달 된 이벤트 (event.target)를 사용하여 이벤트를 전달한 urlStream을 가져옵니다. 로드 된 함수 내의 항목에 대해 동일하게 적용됩니다. 가져 오기 위해 일종의 사전 설정이 필요합니다.

+0

무슨 뜻인지 보여주는 몇 가지 코드를 제공 할 수 있습니까? AS3에 익숙하지 않아서 두려워! –

관련 문제