如何在Firefox和Safari上进行Flex文件上传?

sma*_*irt 9 apache-flex upload firefox file

我有一个将文件上传到服务器的flex应用程序.服务器要求身份验证才能上载.在IE中,上传工作正常.但是在FF和Safari中,它不会上传.我已经看到各地的人都遇到同样的问题,但没有答案.不要让我失败现在stackoverflowers.

Ada*_*tle 3

我在尝试自己寻找答案时发现了这个问题。解决方案相当简单。

根据其他人链接的Flash 播放器错误以及该页面上的评论,我决定将会话标识符附加到我的上传 URL 并尝试一下。真的就是这么简单!

为了使其正常工作,我首先添加一个名为 sessionParams 的 flashVar 参数。这允许我将任何想要的字符串作为我的会话标识符传递给 Flash 播放器,并且稍后它将附加到用于上传的 URL 中。

//sessionParams - resolves firefox upload bug
public var sessionParams:String = "";

//...

public function initApp():void{
    sessionParams = Application.application.parameters.sessionParams;
}
Run Code Online (Sandbox Code Playgroud)

就我而言,我使用启用了 java 会话的 ColdFusion,因此sessionParams在传递到 Flash 播放器之前我的设置如下:

<cfset flashVars = "sessionParams=#urlEncodedFormat('jsessionid=' & session.sessionid)#" />
Run Code Online (Sandbox Code Playgroud)

不要忘记转义 =、& 等特殊字符(我已使用 urlEncodedFormat 完成),以便将它们视为“sessionParams”参数值的一部分,而不是指示其他参数的断点。您正在将未来 URL 信息嵌入到当前 URL 中。

然后,在上传代码中使用 sessionParams 值。这是我如何设置的一个片段:

// Set Up URLRequest
_uploadURL = new URLRequest;
_uploadURL.url = _url + "?" + _sessionParams;
_uploadURL.method = "GET";
_uploadURL.data = _variables;
_uploadURL.contentType = "multipart/form-data";
Run Code Online (Sandbox Code Playgroud)

变量名称不同(但相似),因为这是可重用类的一部分。

希望这对您有帮助。如果没有,请告诉我,我将尝试提供更多代码或解释来帮助您。