2009-11-23 2 views
3

Ruby, RestfulX 및 Paperclip을 사용하여 FileReference 클래스를 사용하여 파일을 업로드하고 있습니다.파일을 성공적으로 업로드 한 시점을 Flash Player는 어떻게 알 수 있습니까?

터미널에서 성공적으로 파일을 저장했다고 말하는 Paperclip의 응답이 표시되지만, Flash는 업로드 성공 여부를 알 수 없습니다.

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

내가 성공적으로 파일을 저장 한 플렉스 말할 필요 보인다 : CursorManager의의 시계가 회전하는 동안 나는 다시 업로드하려고하면

는이 오류를 받고 있어요. 수동으로 할 수 있습니까? 세션이나 쿠키 또는 다른 것을 전달해야합니까?

답변

2

내 웹 서비스 (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"에 대한 나의 핸들러가 때 호출되는 해결 레일이 응답을 보냈지 만 아직 해결되지 않았다 ... 어떤 아이디어? –

+0

추가 의견을 제출했습니다. –

+0

일했습니다! 고마워, 조엘, 고마워. 당신이 DataEvent에 대해 옳다고 생각합니다. –

0

더 좋은 해결책은 다음과 같습니다. fileReference.cancel();

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

하고 다시 수행 할 수 있습니다 : 의 FileReference를 (. 예를 들어, 네트워크 문제의 경우)

또한, 파일을 참조 다시하는 것이 좋습니다 업로드 다시 시도하는 것으로 나타났습니다. 업로드()

0

browse 메소드를 호출하기 전에 fileReference.cancel()을 호출해야합니다. 이렇게하면 모든 찾기 호출 전에 fileReference가 재설정됩니다.

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