嘿,我在使用FileReference上传文件时遇到了麻烦。
在独立运行swf时上传工作正常。它可以将文件发送到远程服务器和localhost(运行相同的应用程序)。但是当swf嵌入firefox,chrome或safari时,我得到IOError#2038。奇怪的是它适用于IE8 ...... 我也尝试从html表单上传文件,它可以工作(在每个浏览器上)。 在完全访问的情况下设置了crossdomain.xml,但它永远不会被调用(它不应该反正......)
非常感谢任何帮助!
答案 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)
无论如何,避免这种疯狂的唯一理智方法是使用完整的路径。试图检测它是否是IE可能会起作用,但我认为在某些时候这种烦恼将被修复;当这种情况发生时,你的代码就会破裂,所以我认为这是一个坏主意。
现在,您可能不想对swf中的完整路径进行硬编码,因此我习惯解决此问题的一个简单解决方案(假设您可以更改嵌入代码)将此路径传递给flash var你嵌入你的瑞士法郎。通常,我使用php检索此路径,因此我不必在部署时手动更改它或者如果你移动东西(我将absolut路径传递给“app root”,对我而言,它通常是嵌入了html代码的html代码swf;然后我将它连接到处理帖子的文件的相对路径,所以从你的swf就像在某种程度上使用相对路径一样)。
所以,如果你可以使用一些服务器端,你可以只编写一段代码而忘记它。但即使你手动执行此操作,也比重新编译swf更容易。
答案 2 :(得分:0)
我遇到过这个问题。问题是您的客户端无法访问您的应用程序...并且应用程序路径可能在客户端上是相对的。如果您在客户端完全符合条件,它将适用于FF和Chrome以及Safari。
出于某种原因,IE能够解析它,而其他浏览器则不能。但是,完全限定路径是最佳做法。任何人都可以解释IE如何解决它?