0

私は、mp3ファイルdownloadManagerの複数のダウンロードを実装するための完全な答えを求めて、Webとstackoverflowの両方を検索してきました。私は多くの投稿を読み、最も効率的な機能は ByteArray、URLStream、および FileStream を使用してディスクを保存することであることに気付きました。私は次のように実装しました:

<?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="downloadFiles()">
<fx:Declarations>

</fx:Declarations>
<fx:Script>
<![CDATA[
import flash.filesystem.*;
import flash.net.URLStream;
public var stream:URLStream;
public var fileData:ByteArray;
public var fileStream:FileStream;
public var file:File; 
public var trackString:String;
public var filearray:Array;
public var urlReq:URLRequest;

private function downloadFiles():void
{
filearray = new Array();
filearray[0]="Crazy";
filearray[1]="Distant Lover";
filearray[2]="Easy Going";
filearray[3]="Give In To Love";
filearray[4]="MuzicAgeErotic Moods";
filearray[5]="MuzicAgeGive In To Love";
filearray[6]="MuzicAgePieces Of Dreams";
filearray[7]="MuzicAgeThere will never be another you";
filearray[8]="Remembered";
filearray[9]="Teach Me Tonight"; 

downloadNextFile();
}
private function downloadNextFile():void{
trackString = filearray.shift();
urlReq = new URLRequest("http://localhost:8080/multiDownloadSampleApp7- debug/MuzicAge/"+trackString+".mp3");
stream = new URLStream();
file = File.documentsDirectory.resolvePath("C:/Users/development/test/"+trackString+".mp3"); 
fileStream = new FileStream(); 
stream.addEventListener(ProgressEvent.PROGRESS, progressBar); 
stream.addEventListener(Event.COMPLETE, writeComplete); 
stream.load(urlReq); 

}

private function writeComplete(evt:Event):void
{     
fileData = new ByteArray();     
stream.readBytes(fileData,0,stream.bytesAvailable); 
fileStream.openAsync(file, FileMode.WRITE)     
fileStream.writeBytes(fileData,0,fileData.length);     
fileStream.close();         
stream.removeEventListener(ProgressEvent.PROGRESS, progressBar);     
stream.removeEventListener(Event.COMPLETE, writeComplete); 

downloadNextFile();
} 

private function progressBar(evt:ProgressEvent):void
{     
// progressBar 

}

]]>
</fx:Script>
</s:WindowedApplication>

すべての MP3 をキャプチャしてディスクに保存しているように見えますが、常に次のエラー メッセージが表示されます。
エラー #2044: 未処理の IOErrorEvent:。text=エラー #2032: ストリーム エラー。multiDownloadSampleApp7/downloadNextFile()[C:\Users\development\newgageProjects\multiDownloadSampleApp7\src\multiDownloadSampleApp7.mxml:40] で multiDownloadSampleApp7/writeComplete()[C:\Users\ development\newgageProjects\multiDownloadSampleApp7\src\multiDownloadSampleApp7.mxml: 59] [SWFのアンロード] multiDownloadSampleApp7.swf

エラーを閉じて保存ディレクトリを見ると、リクエストしたすべての MP3 が配列に含まれています。

4

1 に答える 1

0

を呼び出す前に、すべてのファイルのダウンロードが完了したかどうかを確認しているようには見えませんdownloadNextFile()

したがって、エラーはおそらく、配列の最後に到達してから、null 文字列で URLRequest を生成しようとすることです。

于 2013-07-17T16:34:54.997 に答える