![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 93
|
Есть у нас проект Q-ImageUploader, который отсылает картинки на сервер, предварительно сделав с ними некоторые манипуляции (resize,rotate). Проблема в том, что когда мы их отсылаем методом POST флеш не вызывает событие ProgressEvent.PROGRESS. И в итоге у нас нет прогрессбара.
Как можно с этим побороться? Может как-то на стороне сервера какой специальный скрипт? Может кто-то готов решить эту проблему за деньги? Добавлено через 8 минут var urlRequest:URLRequest = new URLRequest(); urlRequest.data=this._postdata.getPostData(); urlRequest.url=global.urlToUpload; urlRequest.contentType="multipart/form-data; boundary="+_postdata.getBoundary(); urlRequest.method=URLRequestMethod.POST; urlRequest.requestHeaders.push(new URLRequestHeader("Cache-Control", "no-cache")); // upLoader = new URLLoader(); // upLoader.dataFormat=URLLoaderDataFormat.BINARY; // этот листенер не работает upLoader.addEventListener(ProgressEvent.PROGRESS, progressHandler); upLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler); upLoader.addEventListener(Event.COMPLETE, imagesUploadDone); upLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityError); upLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
__________________
Flash Menu Labs - русская версия |
|
|||||
|
Первый вариант. Предполагаю, что вы выбираете файл на локальном диске с помощью FileReference.browse()
затем загружаете его во флэшку с помощью FileReference.load() Значит вам доступно свойство FileReference.data После того как вы отредактировали картинку, полученную битмапу можно записать в FileReference.data, только не так FileReference.data = byteArray, а так FileReference.data.writeBytes, а потом воспользоваться FileReference.upload, а FileReference при аплоаде генерирует событие ProgressEvent Сам таким методом не пользовался, но может сработать. --- Второй вариант, это серверный скрипт, который бы возвращал текущий прогресс аплоада(как это сделано на яндекс видео). Нужно будет в процессе аплоада периодически спрашивать у него о прогрессе. |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 93
|
Цитата:
А можно поподробнее по поводу серверного скрипта (как в яндексе), как это организуется?
__________________
Flash Menu Labs - русская версия |
|
|||||
|
Вообще-то из хелпа можно понять, что URLLoader не генерирует ProgressEvent при аплоаде данных на сервер, а FileReference генерирует. Так что не оказывайтесь так быстро он нормальных нечерезпопных методов
Вы проверьте и отпишитесь потом - мне тоже полезно будет знать. Первый вариант предпочтительней.А второй вариант.. посмотирте на яндексе Сервис яндекс видео.Могу на выходных взяться за деньги реализовывать первый вариант. Если не получится то деньги не возьму А если получится, то возьму 50 баксиков В воскресенье результат теста сообщу. С серверным скриптом не помогу.Последний раз редактировалось kackbip; 27.08.2009 в 09:32. |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 93
|
Спасибо, событие прогресса действительно вызывается. Но вызвать writeBytes не получается, так как file.data == null
Я , кстати, не нашёл описания этого поля в хелпе для FileReference private function selectHandler(event:Event):void { var file:FileReference = FileReference(event.target); trace("selectHandler: name=" + file.name + " URL=" + uploadURL.url); file.data.writeBytes(this._postdata.getPostData(),0,this._postdata.getPostData().length); file.upload(uploadURL); } Посмотрел я яндекс видео и яндекс фото и видео. Поскольку они ничего на стороне клиента не делают, то спокойно могут отсылать с помощью FileReference или FileReferenceList. Почему вы думаете, что они используют скрипты?
__________________
Flash Menu Labs - русская версия Последний раз редактировалось Ляксей; 27.08.2009 в 12:08. |
|
|||||
|
Цитата:
Цитата:
http://help.adobe.com/en_US/AS3LCR/F...0.0/index.html Цитата:
Цитата:
Давайте я уже просто сделаю для вас это ![]() скайп - kackbip666 Последний раз редактировалось kackbip; 27.08.2009 в 13:53. |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 7
|
fileReference.data.writeBytes() не приводит ни к чему, поскольку fileReference.data это read-only массив.
видимо, data просто унаследовал набор функций от ByteArray. еще предложения? как это вообще обычно реализуют, через flash+js? а js позволяет считать переданные байты? Опрашивать сервер вообще не вариант - я загружаю один-два метра, и просто нецелесообразно возиться с серверной обратной связью. хотел сокетами загружать файлы, уже все написал и работает (долго мучался с правильной сборкой заголовков), но оказалось, что сокет все равно не выкидывает ProgressEvent при аплоаде файлов. К тому же для сокетов, оказывается, нужны особые И еще - fileReference мне не совсем подходит, потому что после загрузки данных не возвращает ответ. А надо бы. Ну и измененный файл не отправишь. зы: походу мне нужен свой собственный флеш с блекджеком и шлюхами, и не черезжопу не получится) Последний раз редактировалось beatstream; 03.10.2011 в 21:53. |
|
|||||
|
Цитата:
Есть еще такой не очень красивый вариант - разбить отправляемый файл на несколько частей и грузить части последовательно Будут, конечно, задержки между окончанием загрузки очередного блока и началом загрузки следующего, но этого можно избежать, если грузить в 2 потока.Последний раз редактировалось kackbip; 25.09.2011 в 16:10. |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 7
|
В итоге я забил и сделал проще. Обработкой изображения теперь занимается сервер. Неохота было лишний раз его грузить - у меня лимит на использование процессора и памяти). С другой стороны, на php кода для нужной операции в пару раз меньше (слава GD).
Теперь fileReferenc`ом выбираешь картинку, грузишь на сервер (с прогрессбаром, как надо ) и даже получаешь ответ с сервера (у меня возвращается адрес картинки (или ошибка), чтобы js ее тут же вставлял на страницу). Эффект достигнут. |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:20. |
|
|
« Предыдущая тема | Следующая тема » |
|
|