【问题标题】:AS3 File upload IOError #2038AS3 文件上传 IOError #2038
【发布时间】:2010-07-29 20:22:06
【问题描述】:

嘿,我在使用 FileReference 上传文件时遇到问题。

在独立运行 swf 时上传工作正常。它可以将文件发送到远程服务器和本地主机(运行相同的应用程序)。但是当 swf 嵌入到 firefox、chrome 或 safari 中时,我得到 IOError #2038。奇怪的是,它在 IE8 上运行正常... 我也尝试过从 html 表单上传文件并且它可以工作(在每个浏览器上)。 一个 crossdomain.xml 设置为具有完全访问权限,但它永远不会被调用(它不应该反正......)

非常感谢任何帮助!

【问题讨论】:

    标签: flash actionscript-3 upload


    【解决方案1】:

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

    出现问题是因为用户必须在执行上传操作之前登录。当使用 FileReference 对象执行上传操作时,flashplayer 不会发送浏览器存储的会话 cookie,它有自己的 cookie 空间。您可以在 Google 上搜索有关“Flash Cookie 错误”的更多信息。

    该错误已报告给 Adob​​e:

    由于我的代表无法发布链接(附加 https://)...

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

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

    这个想法是后端在执行登录后将 sessionid 发送到 flash 应用程序。然后,当 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);
    

    【讨论】:

      【解决方案2】:

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

      无论如何,避免这种疯狂的唯一明智的方法是使用完整路径。尝试检测它是否是 IE 可能会起作用,但我认为在某些时候这种烦恼会得到解决;当这种情况发生时,你的代码就会中断,所以我认为这是个坏主意。

      现在,您可能不想在您的 swf 中硬编码完整路径,因此我用来解决此问题的一个简单解决方案(假设您可以更改嵌入代码)是在以下情况下通过 flash var 传递此路径你嵌入你的瑞士法郎。通常,我使用 php 检索此路径,因此在部署或移动内容时不必手动更改它(我将绝对路径传递给“应用程序根”,对我而言,它通常是嵌入的 html 代码swf; 然后我将它连接到处理帖子的文件所在的相对路径,所以从你的 swf 来看,它就像以某种方式使用相对路径)。

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

      【讨论】:

        【解决方案3】:

        我遇到了这个确切的问题。问题是您的客户端无法访问您的应用程序......并且可能应用程序路径在客户端上是相对的。如果您在客户端完全限定它,它将适用于 FF、Chrome 和 Safari。

        由于某种原因,IE 能够解决它,而其他浏览器则不能。但是,最佳实践是完全限定路径。谁能解释一下 IE 是如何解决的?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-05-04
          • 1970-01-01
          • 2012-04-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多