Показать сообщение отдельно
Старый 21.03.2013, 00:40
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 1  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
По умолчанию FileStream не стабильно пишет файлы

Делаю загрузчик sprite sheets с сервера с помощью URLLoader и FileStream.
Почему-то иногда файлы сохраняются нулевого размера. Вроде ProgressEvent всегда показывает наличие байтов при загрузке с URLLoader, а на деле случаются нулевые файлы.
Подскажите, плиз, как правильно делать такую загрузку множества файлов?

Код AS3:
files =  21;// мое количество sprite sheets
	filesArray = new Array();
	for (var i:int = 0; i < files; i++) 
	{
		filesArray.push(i+ 1+ '.png');
		filesArray.push(i+ 1+ '.xml');
	}
	nextDownload();
 
private function nextDownload():void
{
	if (count < filesArray.length){
		downloadFile("http://mysite.com/assets/symbols/" + appScaleFactor + 'x/' + filesArray[count], "assets/symbols/" + filesArray[count]);
	} else {
		trace('finished');
	}
}
 
private function downloadFile(url:String, fileName:String):void {
		stream = new URLStream();
		_fileName = fileName;
		var request:URLRequest = new URLRequest(url);
		stream.addEventListener(flash.events.Event.COMPLETE, completeHandler);
		stream.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
		stream.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
		stream.addEventListener(ProgressEvent.PROGRESS, progressHandler);
		stream.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
		try {
			stream.load(request);
		} catch (error:Error) {
			trace("Unable to load requested URL.");
		}
}
 
private function completeHandler(event:flash.events.Event):void {
		var fileData:ByteArray = new ByteArray();
		stream.readBytes(fileData,0,stream.bytesAvailable);
		stream.removeEventListener(flash.events.Event.COMPLETE, completeHandler);
		stream.removeEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
		stream.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
		stream.removeEventListener(ProgressEvent.PROGRESS, progressHandler);
		stream.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
 
		stream =null;
 
		var newFile:File = File.applicationStorageDirectory.resolvePath(_fileName);
		var fs:FileStream = new FileStream();
		fs.openAsync(newFile, FileMode.WRITE); 
		fs.writeBytes(fileData,0,fileData.length);
		fs.close(); 
		fs = null;
		count++;
		nextDownload();
}	
 
private function progressHandler(event:ProgressEvent):void {
		trace("progressHandler: " + event);
}
 
private function securityErrorHandler(event:SecurityErrorEvent):void {
		trace("securityErrorHandler: " + event);
}
 
private function httpStatusHandler(event:HTTPStatusEvent):void {
		trace("httpStatusHandler: " + event);
}
 
private function ioErrorHandler(event:IOErrorEvent):void {
		trace("ioErrorHandler: " + event);
}
__________________
In Code We Trust