Можно ли скачать и сохранить файл с помощью Adobe Air? - PullRequest
0 голосов
/ 24 марта 2012

Я сделал приложение для Android на Flash, и мне нужно скачать файл и сохранить его в локальном каталоге приложения

Заранее спасибо ....

1 Ответ

6 голосов
/ 24 марта 2012

URLRequest и URLLoader позволят вам получать некоторые данные из Интернета, FileStream позволяет сохранять их локально (FileReference, если вы хотите, чтобы они выбирали, где их сохранить), как в

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       creationComplete="windowedapplication1_creationCompleteHandler(event)">
    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;

            protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void
            {
                // TODO Auto-generated method stub
                var urlLoader:URLLoader = new URLLoader();
                urlLoader.addEventListener(Event.COMPLETE, complete_handler);
                urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
                urlLoader.load(new URLRequest("http://www.shaunhusain.com/CheckboxList/CheckboxList.swf"));

            }

            private function complete_handler(event:Event):void
            {
                var data:ByteArray = event.target.data;

                var fr:FileReference = new FileReference();
                fr.save(data, 'test.swf');

                var fileStream:FileStream = new FileStream();
                trace(File.applicationDirectory.nativePath);
                fileStream.open(new File(File.applicationDirectory.nativePath+"\\test.swf"),FileMode.WRITE);
                fileStream.writeBytes(data, 0, data.length);
            }
        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
</s:WindowedApplication>

EDIT: Версия проекта AS3 Mobile:

package
{
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.filesystem.File;
    import flash.filesystem.FileMode;
    import flash.filesystem.FileStream;
    import flash.net.FileReference;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;
    import flash.utils.ByteArray;

    public class DownloadFileMobileAS3 extends Sprite
    {
        public function DownloadFileMobileAS3()
        {
            super();

            // support autoOrients
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            createLoader();
        }
        protected function createLoader():void
        {
            // TODO Auto-generated method stub
            var urlLoader:URLLoader = new URLLoader();
            urlLoader.addEventListener(Event.COMPLETE, complete_handler);
            urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
            urlLoader.load(new URLRequest("http://www.shaunhusain.com/CheckboxList/CheckboxList.swf"));

        }

        private function complete_handler(event:Event):void
        {
            var data:ByteArray = event.target.data;

            var fr:FileReference = new FileReference();
            fr.save(data, 'test.swf');

            var fileStream:FileStream = new FileStream();
            trace("something");
            trace(File.applicationDirectory);
            trace(File.applicationDirectory.nativePath);
            trace(File.applicationStorageDirectory.nativePath);
            fileStream.open(new File(File.applicationStorageDirectory.nativePath+"\\test.swf"),FileMode.WRITE);
            fileStream.writeBytes(data, 0, data.length);
        }
    }
}

Я включил обе опции в приведенный выше код, вы хотели бы либо удалить часть ссылки на файл, либо удалить часть потока файла, иначе она будет сохранена дважды.

Я только что добавил раздел для мобильных устройств, на самом деле у него есть своего рода диалоговое окно, в котором вам предлагается сохранить файл на Android, хотя это диалоговое окно, которого я никогда раньше не видел, просто дает вам возможность сохранить это и аудиофайлы, файлы изображений и видеофайлы в качестве параметров или расположение по умолчанию в /mnt/sdcard/test.swf. Я позволил сохранить его там и смог увидеть его с помощью ES Explorer (хотя у меня не было хорошего способа проверить, что данные были в порядке, похоже, что они в целом верны). При использовании приложения applicationDirectory произошел сбой, и я не нашел nativePath, поэтому переключил его на applicationStorageDirectory, у которого было значение, и, похоже, он сохранен без ошибок, к сожалению, он находится в моей папке root / data, и поскольку я не Я не могу полностью подтвердить, что файл действительно есть, но ошибок нет. Дайте мне знать, если вы пробовали это и с какими конкретными проблемами вы все еще сталкиваетесь.

...