1
Flex 4.1でのFlash Builder 4の使用 私は配列で指定されたファイルをダウンロードするair appを持っています。 ファイルがディスクに書き込まれた後に状態を変更しようとしています。配列関数が終了するまで待機します。
関数finalscreenは、ファイルのダウンロードが完了する前に呼び出されています。これは私がそれをテストするために置いた大きなビデオファイルで明らかです。
<fx:Script>
<![CDATA[
function finalscreen()
{
this.currentState="Finished";
}
private function initiate_download(event:MouseEvent):void
{
this.currentState="Working";
var filearray:Array = new Array();
filearray[0]="0.jpg";
filearray[1]="1.jpg";
filearray[2]="2.jpg";
filearray[3]="3.jpg";
filearray[4]="4.jpg";
filearray[5]="5.jpg";
filearray[6]="6.jpg";
filearray[7]="7.jpg";
filearray[8]="8.jpg";
filearray[9]="9.jpg";
filearray[10]="10.jpg";
filearray[11]="1.avi";
for (var i:uint; i < filearray.length; i++) {
var remoteURL = "http://domain/dir/" + filearray[i];
var localURL = "C:/dir/" + filearray[i];
downloadFile(remoteURL, localURL);
}
finalscreen();
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.open(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>
<s:states>
<s:State name="Start"/>
<s:State name="Working"/>
<s:State name="Finished"/>
</s:states>
ありがとう!
[OK]を、私はこれをいじってそして最初の11に配列ループを制限し、「複製」機能を呼び出すために、最後に残されています最後に状態の変化がありますが、非同期書き込みのためにうまく動作しません。私はfileStreamをopenasyncからちょうどオープンに変更し、ファイルを順番にダウンロードしようとしますが、遅くなるでしょう。 – mubhcaeb
ほとんど手に入れました! オープンモードをUPDATEに変更し、CLOSEイベントを戻すことができました。 fileStream.openAsync(file、FileMode.UPDATE); 今、私のイベントリスナーは発砲できます! fileStream.addEventListener(Event.CLOSE、??????); 最大のファイルでfinalScreenに設定すると動作します。ファイルを閉じた後、次の配列に移動します。 – mubhcaeb