尝试使用安装了IIS和PHP 5.3的运行Windows的本地计算机上的flash swf进行上传。
var selected_file:FileReference = GetSelectedFile();
var url:String = 'http://localhost.com/upload.php';
var req:URLRequest = new URLRequest(url);
req.data = new URLVariables('source=' + 'computer');
req.method = URLRequestMethod.POST;
selected_file.upload(req, 'file', false);
selected_file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, UploadComplete, false, 0, true);
selected_file.addEventListener(ProgressEvent.PROGRESS, UploadProgress, false, 0, true);
selected_file.addEventListener(IOErrorEvent.IO_ERROR, UploadError, false, 0, true);
selected_file.addEventListener(SecurityErrorEvent.SECURITY_ERROR, UploadSecurityError, false, 0, true);
我在所有处理函数上设置了断点。我在UploadProgress
处理程序上遇到了断点。但是,该文件未上载。查看网络流量时,无法呼叫upload.php
。
查看documentation for FileReference upload函数,我看到了:
如果调用SWF文件,则不允许上传和下载 local-with-filesystem沙箱
看看local-with-filesystem sandbox的定义,我发现了这个:
从这个沙箱中,可执行代码可以读取本地文件(使用 例如,URLLoader类,但无法与网络通信 以任何方式。这确保了用户不能泄露本地数据 到网络或以其他方式不恰当地分享。
这是否意味着无法在本地计算机上测试上传?
更新:据说我需要Security.sandboxType作为LOCAL_TRUSTED
。我一直在尝试通过添加配置文件for user和globally来设置安全类型。配置文件具有cfg
扩展名,并包含一行,即我的swf文件所在文件夹的路径。
添加此配置后,Security.sandboxType仍设置为“remote”。
答案 0 :(得分:0)
local-with-filesystem沙箱 - 出于安全考虑,Flash Player默认将所有本地SWF文件和资产放在local-with-file-system沙箱中。在此沙箱中, SWF文件可以读取本地文件(例如,使用URLLoader类),但它们无法以任何方式与网络通信。这样可以确保用户不会将本地数据泄露给网络或以其他方式不恰当地共享。
在正常情况下,您无法在一个SWF实例中访问文件系统和网络。
但是,似乎可以通过将文件添加到本地受信任的沙箱来将此功能授予特定SWF。 According to Senocular, this may be accomplished in three different ways...
- SWF在Flex Builder 2或Flash Authoring环境中运行
- 位于用户已从(仅限在线)全局安全设置面板授予权限的目录中的SWF。
- 位于本地系统上的Flash Player信任配置(.cfg)文件中指定的目录中的SWF
对于配置文件选项:
您需要选择local playback setting
来编译SWF。
这意味着您需要将配置文件放入
C:\Windows\System32\Macromed\Flash\FlashPlayerTrust\
如果该文件夹不存在,则必须创建该文件夹。
C:\
并保存。