2009-11-23 89 views
3

我使用Ruby,RestfulX和Paperclip上傳文件,使用FileReference類。Flash Player如何知道您何時成功上傳文件?

我從終端上的回形針得到了迴應,表示我已經成功保存了該文件,但它看起來似乎沒有得到它需要知道上傳已成功的信息。

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

看來,我需要告訴Flex的,我已經成功保存文件:

,如果我嘗試再次上傳,而的CursorManager的時鐘紡我得到這個錯誤。有沒有辦法手動做到這一點?我是否需要通過會話或cookie或任何其他內容?

回答

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));

不是最漂亮的解決方案,但我會很好奇,如果它的工作。

+0

我得到響應的背後,卻依然沒有放棄閃光的東西就是了所以「調用FileReference.upload()」呼叫解決......我對「DataEvent.UPLOAD_COMPLETE_DATA」處理程序被調用時,軌道發送響應,但它仍然沒有解決......任何想法? – 2009-11-23 20:42:40

+0

增加了一些額外的想法。 – 2009-11-23 21:12:11

+0

工作!謝謝Joel,我很感激。我認爲你對DataEvent是正確的。 – 2009-11-23 21:15:30

0

更好的解決方案是調用: fileReference.cancel();

我還發現,有上傳再試一次,最好重新引用文件(例如,在網絡出現問題的情況下。):

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

,你可以再做一次: 的FileReference。上傳()

0

您應該在調用瀏覽方法之前調用fileReference.cancel()。這會在每次瀏覽呼叫之前重置fileReference。

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