2017-02-21 36 views
0

我有一个actionscript项目,我将其作为Air桌面应用程序部署,并在浏览器中使用Flash插件进行部署。Flash SWF,从浏览器内部读取文件内容,可能吗?

我的桌面部署读取SWF文件本身,创建该文件的哈希并将其发送到我的服务器。如果哈希值与期望的值不一致,则SWF将自身上传到我的服务器以供进一步检查。这全部使用flash.filesystem库。

在浏览器中部署为Flash文件时可以做同样的事情吗?我无法访问用于浏览器部署的flash.filesystem。

是否比使用其它文件系统的方式存在读取SWF本身。

回答

2

根据这篇文章(http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/Worker.html)整个SWF内容是通过loaderInfo.bytes访问:的ByteArray所以没有必要加载任何东西。请享用。

回退装载:

var aRequest:URLRequest = new URLRequest; 

// Property loaderInfo.url contains the full path to the SWF. 
aRequest.url = loaderInfo.url; 

var aLoader:URLLoader = new URLLoader; 

// Set data format to binary instead of default text. 
aLoader.dataFormat = URLLoaderDataFormat.BINARY; 
aLoader.addEventListener(Event.COMPLETE, onReady); 
aLoader.load(aRequest); 

function onReady(e:Event):void 
{ 
    var anSWF:ByteArray = aLoader.data as ByteArray; 
    trace(anSWF.length); 
} 
+0

好的,loaderInfo.bytes包含了实际的swf数据本身,正是我所期待的。 – Mar

+0

在进一步的检查中,我发现以下内容,实际的swf本身和loaderInfo.bytes上的内容不同,这是因为loaderInfo.bytes包含解压缩版本。 – Mar

+0

@MartinSmith好的,增加了加载解决方案。可惜loaderInfo.bytes不起作用。 – Organis

0

你可以配置你的Flex代码AIR桌面应用程序,它被翻译成SWF文件,可以在浏览器上使用作为嵌入对象。 请阅读更多here

1

要获取SWF字节,请使用URLStream API将字节接收到某个bytearray变量中。

然后可以使用ByteArray API来读取(处​​理)bytearray

+0

谢谢,但我在想,这样的方法是在你指定SWF的位置依赖纠正。即使你阅读文件的位置,你将依赖于浏览器告诉你?我认为这与桌面实现有些不同,因为我询问了实际swf的位置,因此我确实知道我正在阅读正确的文件。 – Mar

+0

请参阅上述注释ref loaderInfo.bytes。 – Mar

+0

无论有什么更简单的解决方案,URLStream都是不必要的,因为无论如何您都需要整个内容。 URLLoader.dataFormat = URLLoaderDataFormat.BINARY就足够了。 – Organis