FileReference.upload()不会在本地上载

时间:2013-10-04 15:40:17

标签: windows actionscript-3 flash security iis-7

尝试使用安装了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 userglobally来设置安全类型。配置文件具有cfg扩展名,并包含一行,即我的swf文件所在文件夹的路径。

添加此配置后,Security.sandboxType仍设置为“remote”。

1 个答案:

答案 0 :(得分:0)

According to Adobe:

  

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
  •   

对于配置文件选项:

  1. 您需要选择local playback setting来编译SWF。

  2. 这意味着您需要将配置文件放入 C:\Windows\System32\Macromed\Flash\FlashPlayerTrust\ 如果该文件夹不存在,则必须创建该文件夹。

  3. 然后创建配置文件(无论你怎么命名它 please.cfg )最后,在文件中输入C:\并保存。
  4. 现在您的整个C:\目录应声明为local_trusted,并且在与服务器联系和访问文件时不应该有任何问题。