1

尝试在安装了 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.

查看FileReference 上传功能的文档,我看到了:

如果调用 SWF 文件位于本地文件系统沙箱中,则不允许上传和下载

查看local-with-filesystem 沙箱的定义,我发现:

在这个沙箱中,可执行代码可以读取本地文件(例如,通过使用 URLLoader 类),但无法以任何方式与网络通信。这可以确保用户不会将本地数据泄露到网络或以其他方式不当共享。

这是否意味着无法在本地机器上测试上传?

更新: 据说我需要将Security.sandboxType设置为LOCAL_TRUSTED. 我一直在尝试通过为 userglobal添加配置文件来设置安全类型。配置文件具有cfg扩展名并包含一行,即我的 swf 文件所在文件夹的路径。

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

4

1 回答 1

0

根据 Adob​​e:

本地文件系统沙箱 - 出于安全目的,默认情况下,Flash Player 将所有本地 SWF 文件和资源放置在本地文件系统沙箱中。在这个沙箱中,SWF 文件可以读取本地文件(例如,通过使用 URLLoader 类),但它们无法以任何方式与网络通信。这可以确保用户不会将本地数据泄露到网络或以其他方式不当共享。

在正常情况下,您无法访问一个 SWF 实例中的文件系统和网络。

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

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

对于配置文件选项:

  1. 您需要使用local playback setting所选内容编译您的 SWF。

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

  3. 然后创建您的配置文件(将其命名为您喜欢的任何名称.cfg)最后,输入C:\文件并保存。
  4. 现在您的整个 C:\ 目录应该被声明为 local_trusted 并且在联系您的服务器和访问您的文件时应该没有任何问题。
于 2013-10-28T01:50:18.140 回答