首先,我正在尝试修复一些我没有开始构建的东西,并且那个项目的人确保我离开时工作正常,尽管我离开后我没有触及过这个版本似乎有同样的问题。我对编程也有点新意,所以如果我在第一篇文章中遗漏了重要信息,请告诉我,我会尝试添加更多信息。
我有一个在线托管的Flash应用程序,它充当用Delphi编写的服务器应用程序的客户端。大多数通信是使用套接字完成的,套接字工作正常。上传数据文件和下载结果文件是使用HTTP请求完成的,只要用户在另一台计算机上使用服务器实例,就可以正常工作。但是,如果用户在自己的计算机上安装了服务器应用程序并尝试使用它将localhost指定为url,则套接字通信仍然有效,但HTTP请求不会。
所有基于套接字的通信都可以正常工作,当它不在localhost上时,所有的HTTP请求都可以正常工作,这就是为什么这对我来说太神秘了。我已经尝试将服务器调度的flash跨域策略文件更改为完全允许,所有端口,所有域,所有http-request-headers,但仍然没有运气。
Flash应用程序将在大多数情况下无限期地等待localhost,直到我关闭服务器应用程序,然后给出此错误消息:
Error #2044: Unhandled SecurityErrorEvent:. text=Error #2048: Security sandbox violation: http://abcde.com/Testing.swf cannot load data from http://localhost:2188/guid=53D569A8-56EA-4AC2-BDA0-2F43525E1378.
我已经尝试在多台计算机上托管它,每台计算机都可以在另一台机器上访问该实例,但在尝试使用自己的实例时无法正常工作。
另外,如果我只是将http://localhost:2188/guid=53D569A8-56EA-4AC2-BDA0-2F43525E1378放入网络浏览器,我试图弹出的结果文件就可以了。
以下是尝试下载文件的Flash应用程序中的代码块:
private function downloadFile():void
{
trace("downloadFile: " + this.guid + " from " + this.server.URL);
fileRef.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
fileRef.addEventListener(ProgressEvent.PROGRESS, downloadProgressHandler);
var ur:URLRequest = new URLRequest("http://" + _server.URL + ":" + _server.port);
ur.url += "/guid=" + _guid;
ur.method = URLRequestMethod.GET;
fileRef.download(ur, _filename);
_downloadStart = true;
}
如果有人有任何见解,我将不胜感激,因为我完全没有想法。
答案 0 :(得分:0)
这是Flash播放器安全模型的限制。要解决此问题,您可以将闪存打包为AIR应用程序,并解除许多安全限制。
如果您在网络服务器上托管您的Flash文件而不是在本地访问.swf,您也可能获得更好的成功。
您无法做的另一件事是从Flash播放器访问本地文件,这是您可以使用AIR运行时无法在Flash播放器中执行的操作的另一个示例。