AS3文件上传IOError#2038

时间:2010-07-29 20:22:06

标签: flash actionscript-3 upload

嘿,我在使用FileReference上传文件时遇到了麻烦。

在独立运行swf时上传工作正常。它可以将文件发送到远程服务器和localhost(运行相同的应用程序)。但是当swf嵌入firefox,chrome或safari时,我得到IOError#2038。奇怪的是它适用于IE8 ...... 我也尝试从html表单上传文件,它可以工作(在每个浏览器上)。 在完全访问的情况下设置了crossdomain.xml,但它永远不会被调用(它不应该反正......)

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:3)

我终于设法解决了这个问题。

问题出现是因为用户必须在执行上载操作之前登录。使用FileReference对象执行上传操作时,flashplayer不会发送浏览器存储的会话cookie,它有类似自己的cookie空间。您可以谷歌了解“Flash Cookie Bug”以获取更多信息。

该错误已经报告给Adobe:

由于我的代表(附加https://)...

,无法发布链接

我实现的解决方案(几乎与SWFUpload库解决此问题的方式相同)是在执行上传时手动发送我的sessionid。

我发现这个链接非常有用,因为我使用的是Django后端。 http://blog.fogtunes.com/2009/11/howto-integrate-swfupload-with-django/

这个想法是后端在执行登录后向flash应用程序发送sessionid。然后,当flash应用程序调用upload()方法时,您应该发送此sessionid(将其添加到URLVariables对象内的URLRequest数据属性中)。最后,当服务器收到请求时,它应该使用sessionid在处理上传操作之前正确设置活动会话。

var urlReq:URLRequest = new URLRequest("http://url-for-upload/");
urlReq.method = URLRequestMethod.POST;
urlReq.data = new URLVariables();
urlReq.data.sessionid = sessionid_from_server; // this is a variable holding the sessionid received by the server after performing the login
fileReference.upload(urlReq);

答案 1 :(得分:1)

或者说,FileReference对于它如何与相对路径一起工作相当奇怪。在大多数情况下,基本路径是swf加载的路径。除了IE(或者它是反过来的?我现在不记得了)。我认为这不是IE / Firefox / chrmoe问题,而是玩家问题。有一个用于IE的Flash播放器 - 使用ActiveX-和其他浏览器的播放器。在某些时候,他们在处理FileReference对象的相对路径方面存在分歧。如果这是一个功能,它是非常愚蠢的,所以我的感觉是这是一个错误,但没有检查错误基础,所以我不确定它是否正式被认为是一个错误。此外,在嵌入代码中设置base_path不起作用。

无论如何,避免这种疯狂的唯一理智方法是使用完整的路径。试图检测它是否是IE可能会起作用,但我认为在某些时候这种烦恼将被修复;当这种情况发生时,你的代码就会破裂,所以我认为这是一个坏主意。

现在,您可能不想对swf中的完整路径进行硬编码,因此我习惯解决此问题的一个简单解决方案(假设您可以更改嵌入代码)将此路径传递给flash var你嵌入你的瑞士法郎。通常,我使用php检索此路径,因此我不必在部署时手动更改它或者如果你移动东西(我将absolut路径传递给“app root”,对我而言,它通常是嵌入了html代码的html代码swf;然后我将它连接到处理帖子的文件的相对路径,所以从你的swf就像在某种程度上使用相对路径一样)。

所以,如果你可以使用一些服务器端,你可以只编写一段代码而忘记它。但即使你手动执行此操作,也比重新编译swf更容易。

答案 2 :(得分:0)

我遇到过这个问题。问题是您的客户端无法访问您的应用程序...并且应用程序路径可能在客户端上是相对的。如果您在客户端完全符合条件,它将适用于FF和Chrome以及Safari。

出于某种原因,IE能够解析它,而其他浏览器则不能。但是,完全限定路径是最佳做法。任何人都可以解释IE如何解决它?

相关问题