成功上传文件后,Flash Player如何知道?

时间:2009-11-23 20:27:18

标签: flex paperclip file-upload

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

我在终端中得到Paperclip的回复,说明我已经成功保存了文件,但看起来Flash似乎永远不会得到它需要知道的上传成功。

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

Error: Error #2174: Only one download, upload, load or save operation can be active at a time on each FileReference.

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

3 个答案:

答案 0 :(得分:2)

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

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

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

不是最漂亮的解决方案,但如果有效,我会很好奇。

答案 1 :(得分:0)

更好的解决方案是致电: fileReference.cancel();

我还发现,要上传再试一次(例如,遇到网络问题),最好重新引用该文件:

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

你可以再做一次:     调用FileReference.upload()

答案 2 :(得分:0)

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

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