Frage

Im Suche nach einem einfachen Weg, um die Dateigrößen der Dateien zu finden i beim Laden der Planung, ohne sie noch geladen werden. Ich bin im Grunde ein Batch-Dateien zu machen, die geladen werden muss, und es wäre sehr nützlich, wenn ich vorher bestimmen könnte, wie groß die Gesamtbelastung sein wird.

das Loader-Objekt in Flash hat eine Eigenschaft totalbytes, aber das wird nur einen Wert zurückgeben, wenn Sie bereits eine Datei geladen werden.

War es hilfreich?

Lösung

Mit dem geladenen, sind Sie vollständig geladen bedeuten, oder ohne Last Call? Wenn eine Last Call akzeptabel ist, könnte die folgende nützlich sein. Der Fortschritt Ereignis gibt die Gesamtgröße der eingehenden Daten auf dem ersten Feuer. Wir lassen nur ein bestimmtes Fortschritt Ereignis Feuer, den Gesamtwert des aktuellen Ladepunktes nehmen und hinzufügen, dass unsere eigenen _total variabel; Wir setzen diese bis unsere Dataprovider (array, xml, etc) ist leer. am Ende haben Sie die Summe aller Ihrer Vermögenswerte Summen.

package
{
    import flash.display.Sprite;
    import flash.display.Loader;
    import flash.events.Event;
    import flash.events.ProgressEvent;
    import flash.URLLoader;
    import flash.URLRequest;

    public class ExampleDocumentClass extends Sprite
    {
        private var _urlLoader:URLLoader;
        private var _loader:Loader;
        private var _request:URLRequest;
        private var _total:Number;
        private var _array:Array;

        public function ExampleDocumentClass():void
        {
            if(stage) _init;
            else addEventListener(Event.ADDED_TO_STAGE, _init);
        }
        private function _init(e:Event = null):void
        {
            _array = [{type:"nonDisplay", path:"path/to/file"},{type:"display", path:"path/to/file"}];
            _urlRequest = new URLRequest();

            //Non display asset
             _urlLoader = new URLLoader();
            _urlLoader.addEventListener(ProgressEvent.PROGRESS, _onProgress);

            //Display asset
            _loader = new Loader();

            loadAsset();
        }
        private function loadAsset():void
        {
            if(_array.length > 0)
            {
                var pObj:Object = _array[0];
                if(pObj.type == "nonDisplay")
                {
                    loadNonDisplayAsset(pObj.path);
                }
                else
                {
                    loadDisplayAsset(pObj.path);
                }
                //Remove this item from the array;
                _array.shift();
            }
        }
        private function loadNonDisplayAsset(pAsset:String):void
        {
            _urlRequest.url = pAsset;
            _urlLoader.load(_urlRequest);
        }
        private function loadDisplayAsset(pAsset:String):void
        {
            _urlRequest.url = pAsset;
            _loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, _onProgress);
            _loader.load(_urlRequest);
        }
        private function _onProgress(e:ProgressEvent):void
        {
            _total += e.bytesTotal;
            _loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, _onProgress);
            _urlLoader.removeEventListener(ProgressEvent.PROGRESS, _onProgress);
        }
    }
}

So laden wir einen Vermögenswert gerade lang genug, um seine Größe insgesamt anhängen, um unsere eigenen _total Variable und dann nennen wir das nächste Element in dem Array und seine Gesamt anhängen, bis der Datenprovider ist leer. Natürlich könnte dies mit XML erfolgen, oder aber Sie wollen, ein Array ist genau das, was ich für die Ausübung verwendet wird.

Andere Tipps

Es gibt keinen Weg, um die Größe einer Datei zu bekommen, bevor sie von Actionscript 3. Eine einfache Lösung wäre ein kleines Skript zu dem Server hinzuzufügen, die für alle Dateien durchsucht und gibt ihre Namen und ihre Größe auf die swf (als JSON oder XML oder was auch immer).

Es gibt keine Möglichkeit, dies in Actionscript zu tun. Sie werden einige Server-Seite Code benötigen, dies zu tun. Sie könnten eine Methode erstellen, die einen Dateinamen und gibt die Gesamtanzahl der Bytes nimmt.

Ich weiß nicht, wie Sie dies mit Actionscript tun würden (ich bin kein Guru), aber meine erste Vermutung wäre eine PHP-Skript zu verwenden (oder eine andere Skriptsprache Ihrer Wahl), um die Dateigrößen und Rendite zu bekommen die Werte.

Ein anderer (wahrscheinlich übertrieben) Weg wäre, etwas zu schaffen, die einfach den Server für die Header der Datei fragt (einschließlich der Dateigröße). Das gleiche könnte einfach erreicht werden dem Start der Datei und Schließen des Stroms zum Download, wenn Sie die Dateigröße haben (sollte ziemlich schnell sein) oder mit (wie zuvor vorgeschlagen) einen anderen Weg, um den Server für die Größe der Datei zu fragen (nützlich, wenn Sie mehrere Dateien laden und müssen die Dateigröße vor dem Laden)

wissen

Ich habe mit dem Verfahren zur Verfügung gestellt von Brian Hodge, sowie ein anderen Verfahren experimentiert, in dem ich Variablen (Ordner Standorte als Strings aus XML) gesendet, um PHP, um die Gesamtgröße aller Dateien innerhalb eines bestimmten Ordners und Rückkehr zu bekommen die Daten in Flash.

Ein großes Problem, das ich auf meiner Reise Paradies Vorbelastung begegnet war, dass Flash Player inkonsistente Ergebnisse hinsichtlich zu produzieren scheint zur Dateigröße! Auch wenn ich genau die gleichen Dateien geladen zweimal würde Flash-mir sagen, sie waren verschiedene Größen ... manchmal.

Dies verursacht auch Probleme mit der alternativen (PHP) Methode, da würde das PHP-Skript (scheinbar) genaue Dateigröße erzeugen, die mit denen von Flash erzeugten inkonsistent waren, was mein Lader auf 85% oder 128% gehen, abhängig auf Caching und Flash-Stimmung: /

verschrottet ich beide Methoden für eine nette Klasse namens Bulk-Loader , die für die Warteschlange Laden und Fortschritt Verfolgung mehrerer Elemente erlaubt, und vieles mehr: D

Seien Sie sich bewusst sein, dass es die SWF-Dateigröße erhöhen deutlich ... wie ironisch

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top