FileReference.upload()不在本地上传

尝试使用安装了IIS和PHP 5.3的运行Windows的本地计算机上使用闪存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处理程序中find了一个断点。 但是,该文件没有被上传。 在查看networkingstream量时,没有呼叫upload.php

看FileReference上传函数的文档我看到这个:

如果调用的SWF文件位于local-with-filesystem沙盒中,则不允许上传和下载

看一下local-with-filesystem沙盒的定义,我发现这个:

从这个沙箱中,可执行代码可以读取本地文件(例如使用URLLoader类),但不能以任何方式与networking通信。 这保证了用户本地数据不能泄露到networking或者不恰当的共享。

这是否意味着没有办法在本地机器上testing上传?

更新:假设我需要有Security.sandboxType LOCAL_TRUSTED 。 我一直在尝试通过为用户和全局添加configuration文件来设置安全types。 configuration文件具有cfg扩展名,并包含一行,即swf文件所在文件夹的path。

仍然在添加此configuration后,Security.sandboxType被设置为“远程”。

Solutions Collecting From Web of "FileReference.upload()不在本地上传"

据Adobe介绍:

本地与文件系统沙箱 – 为了安全起见,默认情况下,Flash Player将所有本地SWF文件和资产放置在本地与文件系统沙箱中。 在这个沙箱中, SWF文件可以读取本地文件 (例如使用URLLoader类), 但是它们不能以任何方式与网络通信 。 这保证了用户本地数据不能泄露到网络或者不恰当的共享。

在正常情况下,您不能在一个SWF实例中访问文件系统网络。

但是,通过将文件添加到本地受信任的沙箱,似乎可以将此功能授予特定的SWF。 根据Senocular的说法,这可以通过三种不同的方式完成。

  • SWF在Flex Builder 2或Flash Authoring环境中运行
  • 位于用户已从(仅在线)“全局安全设置”面板授予权限的目录中的SWF。
  • SWF位于本地系统上Flash Player信任配置(.cfg)文件中指定的目录中

对于配置文件选项:

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

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

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