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, и поскольку я не Я не могу полностью подтвердить, что файл действительно есть, но ошибок нет. Дайте мне знать, если вы пробовали это и с какими конкретными проблемами вы все еще сталкиваетесь.