1
Flex 4.1에서 Flash Builder 4 사용하기. 배열에 지정된 파일을 다운로드하는 에어 앱이 있습니다. 파일이 디스크에 기록 된 후에 상태를 변경하려고합니다.배열 함수가 끝날 때까지 대기 :
파일 다운로드가 완료되기 전에 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>
고마워요!
확인과 제 11 배열 루프를 제한하고는 "중복"함수를 호출 할 때 마지막 남은 : 여기
다른 사람들이 참조 내 코드입니다 결국 상태가 변경되지만 비동기 쓰기 때문에 제대로 작동하지 않습니다. openStream에서 openStream으로 fileStream을 변경하고 파일을 순차적으로 다운로드하려고 시도하지만 속도가 느려집니다. – mubhcaeb거의 완성되었습니다! 열린 모드를 UPDATE로 변경하여 CLOSE 이벤트를 반환 할 수 있습니다. fileStream.openAsync (file, FileMode.UPDATE); 이제 내 이벤트 수신기를 사용할 수 있습니다! fileStream.addEventListener (Event.CLOSE, ??????); 그리고 가장 큰 파일에서 finalScreen으로 설정하면 작동합니다. 이제 파일을 닫은 후에 배열로 다음 파일로 이동해야합니다. – mubhcaeb