我很好奇直接从文件系统加载图像和视频数据的正确方法是什么,而不使用HTTP。
我正在编写一个AIR幻灯片应用程序,它运行良好,但目前依赖于本地MAMP服务器通过标准的,经过验证的真实FLASH媒体加载方法将所有媒体交给应用程序。
我知道,因为FLASH是作为一个网络插件开发的,所以它最好地处理这种接收数据的方式,但我真的很想解开这个相当繁重和不必要的东西并将应用程序作为一个独立的播放器,但是,我不清楚加载媒体的“正确”方法是什么。
我准备好了File对象,并且我已经让用户选择从中拉取媒体的本地目录,并且我从列表中获取文件列表(基于它们的扩展名)。 ..但现在是什么?
答案 0 :(得分:3)
首先,您必须将文件内容放在ByteArray
中(代码来自FileStream
documentation)
var bytes:ByteArray = new ByteArray();
var myFileStream:FileStream = new FileStream();
var myFile:File = File.documentsDirectory.resolvePath("test.jpg");
myFileStream.addEventListener(ProgressEvent.PROGRESS, progressHandler);
myFileStream.openAsync(myFile, FileMode.READ);
function progressHandler(event:ProgressEvent):void
{
if (myFileStream.bytesAvailable)
{
myFileStream.readBytes(bytes, myFileStream.position, myFileStream.bytesAvailable);
}
else
{
myFileStream.removeEventListener(ProgressEvent.PROGRESS, progressHandler);
loadImage();
}
}
然后您可以在Loader
中加载这些字节以显示图像(请参阅方法Loader.loadBytes
)
function loadImage():void
{
var loader:Loader = new Loader();
loader.loadBytes(bytes);
addChild(loader);
}
干杯
答案 1 :(得分:1)
使用此代码,Loader将触发Event.COMPLTE事件,您将能够从中操作Bitmap:
var bytes:ByteArray = new ByteArray();
var myFileStream:FileStream = new FileStream();
var myFile:File = File.documentsDirectory.resolvePath(YOUR_PATH);
myFileStream.addEventListener(Event.COMPLETE, fileCompleteHandler)
myFileStream.openAsync(myFile, FileMode.READ);
function fileCompleteHandler(event:Event):void
{
myFileStream.readBytes(bytes);
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
loader.loadBytes(bytes);
function imageLoaded(e:Event):void
{
addChild(Bitmap(loader.content));
myFileStream.removeEventListener(Event.COMPLETE, fileCompleteHandler);
myFileStream.close();
}
}
PS:感谢Kodiak,我根据你的代码制作了我的代码。