문제

나는 아직로드하지 않고로드 할 파일의 파일 크기를 찾는 간단한 방법을 찾고 있습니다. 기본적으로로드해야 할 파일 배치를 만들고 있으며 총 부하가 얼마나 큰지 사전에 결정할 수 있다면 매우 유용 할 것입니다.

Flash의 로더 객체에는 TotalBytes 속성이 있지만 이미 파일을로드 할 때만 값을 반환합니다.

도움이 되었습니까?

해결책

로드함으로써, 당신은 완전히로드되었거나로드 호출이 없다는 것을 의미합니까? 로드 호출이 허용되면 다음이 유용 할 수 있습니다. 진행 상황은 첫 번째 화재에서 들어오는 데이터의 총 크기를 제공합니다. 우리는 단지 주어진 진행 상황이 발사되고, 현재 로딩 품목의 총 값을 취하고,이를 우리 자신의 _total 변수에 추가합니다. 우리는 Dataprovider (배열, XML 등)가 비어있을 때까지 이것을 계속합니다. 결국 당신은 모든 자산 총계의 합이 있습니다.

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);
        }
    }
}

그래서 우리는 자산을 우리 자신의 _total 변수에 부여하기에 충분히 긴 자산을로드 한 다음 배열의 다음 항목을 호출하고 데이터 제공 업체가 비어있을 때까지 총계를 부여합니다. 분명히 이것은 XML로 수행 될 수 있지만, 원하시면 배열은 내가 운동에 사용한 것입니다.

다른 팁

전에 파일의 크기를 얻는 방법이 없습니다. Actionscript 3. 쉬운 솔루션은 서버에 작은 스크립트를 추가하여 모든 파일을 스캔하고 이름과 크기를 SWF로 반환하는 것입니다. JSON 또는 XML 또는 무엇이든).

ActionScript 에서이 작업을 수행 할 방법이 없습니다. 이를 위해서는 서버 사이드 코드가 필요합니다. 파일 이름을 사용하고 총 바이트를 반환하는 메소드를 만들 수 있습니다.

나는 당신이 Actionscript (Guru No No)로 어떻게이를 수행 할 것인지는 모르겠지만 첫 번째 추측은 PHP 스크립트 (또는 선택한 다른 스크립팅 언어)를 사용하여 파일 크기를 얻고 값을 반환하는 것입니다.

또 다른 (아마도 과잉) 방법은 파일의 헤더 (파일 크기 포함)를 서버에게 묻는 것을 만드는 것입니다. 파일을 다운로드하기 시작하고 파일 크기가있을 때 (매우 빠르야 함) 또는 (이전에 제안 된대로) 파일 크기를 요구하는 다른 방법 (유용한 경우 유용한 경우)을 닫을 때 단순히 파일을 다운로드하고 스트림을 닫는 것도 마찬가지로 달성 할 수 있습니다. 여러 파일을로드하고로드하기 전에 파일 크기를 알아야합니다)

Brian Hodge가 제공 한 방법과 특정 폴더 내의 모든 파일의 결합 크기를 가져 와서 데이터를 플래시.

Paradise Paradise를 사전로드하기위한 여정에서 발생한 주요 문제 중 하나는 Flash Player가 파일 크기와 관련하여 일관되지 않은 결과를 낳는 것 같습니다! 내가 정확히 같은 파일을로드하더라도 플래시가 두 번 플래시하면 크기가 다르다고 말할 것입니다.

또한 PHP (PHP) 방법에 문제가 발생했기 때문에 PHP 스크립트는 플래시로 생성 된 정확한 파일 크기 결과를 생성하기 때문에 로더는 캐싱 및 캐싱 및 128%로 85% 또는 128%로 이동했습니다. 플래시의 기분 :/

나는 멋진 수업을 선호하여 두 가지 방법을 모두 폐기했습니다. 벌크 로더, 여러 항목의 대기열로드 및 진행 상황 추적 등을 허용하는 것 : D

SWF 파일 크기를 크게 증가시킬 것입니다 ... 얼마나 아이러니 한가

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top