PDA

Просмотр полной версии : Как просчитать размер файлов


54321go
09.10.2007, 21:05
Я гружу карнинки с папки, мне надо узнать сумму размеров всех файлов до загрузки.

Mnilionic
09.10.2007, 21:13
если список файлов находится во внешнем файле, например в xml.
То можно этот список грузить не на прямую, а через php скрипт, который подсчитывает общий объём и отправляет это значение вместе со списком флешу.

BigDan
09.10.2007, 21:15
Средствами флеша - никак.

54321go
09.10.2007, 21:17
http://deforum.ru/forum/viewtopic.php?t=43817
Вот сдесь написано MovieClipLoader() -> onLoadStart() -> fullsize+=getBytesTotal(). Но я не пойму как это сделать.

BigDan
09.10.2007, 21:20
Ты ведь сказал, что хочешь узнать размер до загрузки

54321go
09.10.2007, 21:26
Мне надо прелоудер сделать на все файлы, я понял что сначало узнаём суму всех размеров а потом грузим.

Mnilionic
09.10.2007, 21:33
картинки грузишь последовательно или параллельно?

если друг за другом, то как я писал выше.
если всё одним махом, то получаешь при старте размер каждой картинки, суммируешь = общий размер.
при загрузке получаешь откаждой картинки getBytesLoaded и также суммируешь = общий загруженный размер

и фигачешь статус из этих двух параметров

54321go
09.10.2007, 21:41
Все одним махом. Как получить общий размер? Дай пример пожалуйсто.

Mnilionic
09.10.2007, 21:45
см.Help
MovieClipLoader.loadClip()

там и пример рабочий и описание примера

54321go
09.10.2007, 21:52
onLoadProgress вызывается много раз, для сумирования не подходит. А totalBytes больше негде не выжу.

BigDan
09.10.2007, 21:57
MovieClipLoader.getProgress()

Mnilionic
09.10.2007, 22:00
Значит посмотрите ещё раз.

Kikasso
09.10.2007, 22:39
Файлы грузятся по очереди, теоретически можно начать грузить файл, получить его размер, бросить и начать грузить следующий, а потом все по -новой, но это ж тоска зеленая и не факт что сработает. Работающая схема:
xml
<?xml version="1.0" encoding="utf-8"?><files>
<file id="main" src="main.swf" size="294311" depth="10"/>
<file id='mover' src='mover.swf' size="1234" depth="2000000" />
<file id='tracer' src='tracer.swf' size="999" depth="2000001" />
</files>
Размер файла выдается на сервере через php filеsize (вроде бы). Или забивается вручную, можно от балды (в этом случае индикатор загрузки будет двигаться то быстрее, то медленнее чем надо, типа коннект неровный)
Затем xml обрабатывается, значения суммируются и получается общий размер всех файлов. Далее размер каждого файла делим на общую сумму и получаем долю файла в общем весе файлов.
Далее грузим каждый файл по очереди, делим реально загруженное на реальный размер файла и умножаем на заявленную долю.
Вот кусок кода, выдран из класса, работать ессно не будет, только как иллюстрация:private static function loadAll():Void{
var fakeTotal:Number = 0;
loadedK = 0;
var i:Number = 0;
numLoaded = 0;
numLoad = loadArr.length;
if(numLoad > 0){
loader.percent = 0;
for( i = 0; i< loadArr.length; i++)fakeTotal += loadArr[i].size;
for( i = 0; i< loadArr.length; i++)loadArr[i].k = loadArr[i].size / fakeTotal;
}
loadNext();
}
private static function loadNext():Void{
if(!loadArr.length){
onLoadEnd();
return;
}
var o:Object = loadArr.pop();
currK = o.k;
mcl.loadClip( o.src, o.tgt );
}
private static function onLoadInit( mc:MovieClip ){
loadedK += currK;
loadNext();
}
private static function onLoadProgress( mc:MovieClip, loadedBytes:Number, totalBytes:Number ){
var n:Number = currK * loadedBytes/(totalBytes || 1000000) + loadedK;
loader.percent = n;
}
Плюс схемы - не дает ошибки даже при неверно указанном размере файлов, потому что сумма всех долей - 1.