Как Flash Player узнает, что вы успешно загрузили файл?

Я использую 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 или что-то еще?


person Lance Pollard    schedule 23.11.2009    source источник


Ответы (3)


В моих веб-сервисах (PHP/Python) я отправляю ответ через сервис. Загрузка происходит, обрабатывается и отправляется ответ, который обработчик событий Flex/FLash использует в качестве ответа. Если на стороне службы нет возврата, Flex/Flash не будет знать, что что-то произошло, и поэтому обработчик событий не будет активирован. Как правило, это может быть простой оператор return True или что-то более сложное, в зависимости от ваших потребностей.

Таким образом, FileReference обычно отправляет Event.COMPLETE когда он будет завершен. Я предполагаю, что это то, что обрабатывает механизмы внутри. Интересно, обходит ли DataEvent этот механизм каким-то образом? Вы можете вручную отправить Event.COMPLETE из FileReference в вашем обработчике.

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

не самое красивое из решений, но мне было бы любопытно, если бы это сработало.

person Joel Hooks    schedule 23.11.2009
comment
Я получаю ответ, но он все еще не дал flash то, что хочет, поэтому вызов fileReference.upload() разрешается... Мой обработчик для DataEvent.UPLOAD_COMPLETE_DATA вызывается, когда rails отправляет ответ, но он все еще не разрешен ... Любые идеи? - person Lance Pollard; 23.11.2009
comment
добавил некоторые дополнительные мысли. - person Joel Hooks; 24.11.2009
comment
работал! спасибо Джоэл, я ценю это. Я думаю, вы правы насчет DataEvent. - person Lance Pollard; 24.11.2009
comment
Я думаю, что RestfulX должен справиться с этим. Если это не так, они должны это исправить;) - person Joel Hooks; 24.11.2009

Лучшим решением является вызов: fileReference.cancel();

Я также обнаружил, что при загрузке, чтобы повторить попытку (например, в случае проблемы с сетью), лучше повторно сослаться на файл:

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

и вы можете сделать это снова: fileReference.upload()

person Balance    schedule 30.10.2012

Вы должны вызвать fileReference.cancel() перед вызовом метода просмотра. Это сбрасывает fileReference перед каждым вызовом просмотра.

fileReference.cancel();
fileReference.browse( [new FileFilter( "Excel", "*.xls;*.xlsx" )] );
person Anil Chahal    schedule 25.04.2014