Flash 动作脚本可以读写本地文件系统吗?

Posted

技术标签:

【中文标题】Flash 动作脚本可以读写本地文件系统吗?【英文标题】:Can Flash action script read and write local file system? 【发布时间】:2010-12-21 04:04:21 【问题描述】:

我认为它只能访问网络而不能访问本地文件系统,但是网上有人说它可以在最新版本中,有人可以确认吗?它可以到达任意文件还是只到达特定位置?

谢谢。 斌

【问题讨论】:

【参考方案1】:

一般来说,来自网络服务器的 SWF无法从客户端计算机读取文件。但它可以将用户选择的文件从客户端机器上传到服务器。操作系统特定的对话框提示用户选择要上传到服务器的文件。因此,Flash 无法读取它想要的任何文件,只能读取用户明确允许的文件。

在Flash Player 10之前,SWF没有直接访问上载的文件的内容 - 所有它所做的一切都充当了选择文件并将其发送到服务器的接口。获取其内容的唯一方法是使用URLLoader 将其从服务器发送回 SWF。

但是从 FP10 开始,FileReference 类具有 load() 方法,允许您将用户选择的文件直接加载到 SWF,而不是通过服务器传递。

类似的规则也适用于下载——文件只能在用户允许的情况下保存到用户的机器中,并且保存在用户指定的位置和名称。在 FP10 之前,您只能将文件从服务器下载到客户端 - 如果您必须将使用 SWF 创建的某些图像保存到客户端计算机,则必须将其发送到服务器,然后提示用户下载。从 FP10 开始,您可以直接从 SWF 写入数据(当然需要用户许可)。


除此之外,SWF 还可以将SharedObjects 存储在客户端计算机中,这类似于浏览器 cookie。存储共享对象不涉及用户的任何对话框或权限。以下内容来自上面链接的 livedocs 页面。

本地共享对象有一些限制,在您设计应用程序时需要考虑这些限制。有时 SWF 文件可能不允许写入本地共享对象,有时本地共享对象中存储的数据可能会在您不知情的情况下被删除。 Flash Player 用户可以管理单个域或所有域可用的磁盘空间。当用户减少可用磁盘空间量时,可能会删除一些本地共享对象。 Flash Player 用户还具有隐私控制,可以防止第三方域(当前浏览器地址栏中的域以外的域)读取或写入本地共享对象。

【讨论】:

【参考方案2】:

Flash 播放器有一个名为sandbox 的安全机制来保护用户本地文件,作为用户,您不希望 Flash 脚本访问您的私人文件。

您可以通过两种方式访问​​这些文件: 1) 用户授予 Flash Player 访问某个文件夹的权限(右键单击 Flash Player -> 设置 -> 高级 -> 安全) 2) 使用 adobe air 将 flash 播放器包装在一个可执行的桥接器中,从而可以访问文件系统 -> 这不是 Web 应用程序,而是用户安装的程序。

Flash 有一个文件上传器,如果有帮助,它可能会帮助您允许用户手动将文件加载到您的程序中

【讨论】:

我知道你的回答是很久以前的事了。但是,该术语不是“sanbox”,而是“sandbox”,请参阅en.wikipedia.org/wiki/Sandbox_(computer_security)。您的问题中来自“sanbox”的链接似乎已失效,并路由到通用页面。由于这个问题是在我刚刚完成的谷歌搜索的第一页上,并且您的答案仍然添加了一些有用的信息,因此改进您的答案可能会很好,使用“沙盒”并链接到类似 wkipedia 的内容。

以上是关于Flash 动作脚本可以读写本地文件系统吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用纯动作脚本或adobe flash cs4 professional开发游戏

使用flash动作脚本开发网络游戏

如何从 flash 中的动作脚本发布到 wordpress

Flash 动作脚本

转到外部 Flash 动作脚本 3 中的下一帧

HDFS原理解析(总体架构,读写操作流程)