crossdomain.xml 和 FileReference.upload 的 Flex 问题

Posted

技术标签:

【中文标题】crossdomain.xml 和 FileReference.upload 的 Flex 问题【英文标题】:Flex Issue with crossdomain.xml and FileReference.upload 【发布时间】:2009-03-25 01:57:36 【问题描述】:

问候

我有一个 Flex 应用程序,它向位于不同域中的 Web 应用程序发出各种请求。因此,我制作了一个自定义 crossdomain.xml 以允许从我的 Flex 应用程序进行访问。 这个文件的内容是

> <!DOCTYPE cross-domain-policy SYSTEM
> "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
> <cross-domain-policy>
>     <site-control permitted-cross-domain-policies="all"/>
>     <allow-access-from domain="*" secure="false" to-ports="*"/>
> </cross-domain-policy>

这个 crossdomain.xml 位于我的 webapp 的一个子文件夹中:http://host:port/services/crossdomain.xml 服务(一些是 http 服务,另一些是 Web 服务)都位于 services 子文件夹中。

我正在使用 Security.loadPolicyFile 加载 crossdomain.xml,一切正常。直到我尝试使用 FileReference 对象上传文件。即使我的 HTTP 表单位于 services 子文件夹下并且我正确加载了 crossdomain.xml 文件(我可以执行 http 请求和 Web 服务请求),但每次我尝试上传文件时,我都会遇到臭名昭著的安全沙箱违规。

我错过了什么?是否有任何允许文件上传的特殊说明?根据 Adob​​e 文档 (http://livedocs.adobe.com/flex/3/html/help.html?content=05B_Security_10.html),一切都配置良好。有什么想法吗?

【问题讨论】:

您使用的是什么浏览器、操作系统和 Flash Player 版本?基于浏览器/操作系统的 FileReference 行为存在已知差异。这可能是其中之一。 您好,感谢您的回答我正在使用 Flex sdk 3.2 SO:Mac OSX Leopard 浏览器:Safari 3 和 Firefox 3。两者都带有 Flash 10.0 r12 插件 【参考方案1】:

Flash Player 中的文件上传使用 Socket API 而不是浏览器网络 API。所以要以这种方式做事,你需要有一个socket policy file。

更简单的替代方法是通过 RemoteObject 进行上传。为此,您需要使用 Flash Player 10 中的新 FileReference API,以便您可以读取文件客户端的字节,然后在 RemoteObject 调用中将它们发送到服务器。

【讨论】:

【参考方案2】:

我也遇到了同样的问题,crossdomain.xml 404 not found。

我们在项目中将 flex 与 salesforce.com 集成,但遇到了 crossdomain.xml 错误。

在登录验证中,我们在本地使用用户名和密码进行测试,在错误中我们提供了连接到 salesforce.com 的服务器 URL。

它在除 chrome 之外的所有浏览器中都能正常工作。然后首先进行更改以检查服务器 URL,并将测试用户名和密码详细信息包含在故障功能中,它也适用于 chrome。没有将任何 crossdomain.xml 文件添加到根目录。

可能是 chrome 浏览器的初始测试详细信息没有被错误的 serverl URL 覆盖。

【讨论】:

以上是关于crossdomain.xml 和 FileReference.upload 的 Flex 问题的主要内容,如果未能解决你的问题,请参考以下文章

jwplayer 不支持 crossdomain.xml

在 ejabberd 中找不到 crossdomain.xml [关闭]

什么是 crossdomain.xml 文件?

跨域策略文件crossdomain.xml文件

Amazon S3 crossdomain.xml 始终显示 403 Forbidden

通过弱 CrossDomain.xml 使用 ActionScript 绕过 CSRF