3

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

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

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

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

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

4

3 回答 3

2

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

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

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

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

于 2009-11-23T20:32:24.910 回答
0

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

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

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

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

于 2012-10-30T13:12:33.397 回答
0

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

fileReference.cancel();
fileReference.browse( [new FileFilter( "Excel", "*.xls;*.xlsx" )] );
于 2014-04-25T10:08:34.347 回答