【问题标题】:How does the Flash Player know when you have successfully uploaded a File?Flash Player 如何知道您已成功上传文件?
【发布时间】:2014-04-25 18:08:34
【问题描述】:

我正在使用 Ruby、RestfulX 和 Paperclip 上传文件,使用 FileReference 类。

我在终端中收到 Paperclip 的响应,说我已成功保存文件,但 Flash 似乎永远无法知道上传成功所需的信息。

如果我在 CursorManager 的时钟旋转时尝试再次上传,则会收到此错误:

错误:错误 #2174:在每个 FileReference 上一次只能激活一个下载、上传、加载或保存操作。

看来我需要告诉 Flex 我已经成功保存了文件。有没有办法手动做到这一点?我是否需要传递会话或 cookie 或其他任何东西?

【问题讨论】:

    标签: apache-flex paperclip file-upload


    【解决方案1】:

    在我的网络服务 (PHP/Python) 中,我通过服务发送响应。上传发生、处理并发送返回,Flex/FLash 事件处理程序将其用作响应。如果服务端没有返回,Flex/Flash 将不知道发生了什么,因此事件处理程序将不会被激活。通常,这可以像 return True 语句一样简单,也可以根据您的需要更复杂。

    所以FileReference generally dispatches an Event.COMPLETE 完成后。我猜这是在内部处理机制的原因。我想知道 DataEvent 是否以某种方式绕过该机制?您可以从处理程序中的 FileReference 手动分派 Event.COMPLETE。

    fileReference.dispatchEvent(new Event(Event.COMPLETE));

    不是最漂亮的解决方案,但我很好奇它是否有效。

    【讨论】:

    • 我收到了回复,但它仍然没有给闪存它想要的东西,所以“fileReference.upload()”调用得到了解决......我的“DataEvent.UPLOAD_COMPLETE_DATA”处理程序是在 rails 发送响应时调用,但仍未解决...有什么想法吗?
    • 添加了一些额外的想法。
    • 成功了!谢谢乔尔,我很感激。我认为您对 DataEvent 的看法是正确的。
    • 我认为 RestfulX 应该处理这个问题。如果没有,他们应该修复它;)
    【解决方案2】:

    更好的解决方案是调用: fileReference.cancel();

    我还发现,要重试上传(例如,在网络问题的情况下),最好重新引用文件:

    var url : String = fileReference.url;
    fileReference.cancel();
    fileReference = new File(url);
    

    你可以再做一次: fileReference.upload()

    【讨论】:

      【解决方案3】:

      您应该在调用浏览方法之前调用 fileReference.cancel()。这会在每次浏览调用之前重置 fileReference。

      fileReference.cancel();
      fileReference.browse( [new FileFilter( "Excel", "*.xls;*.xlsx" )] );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多