Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [...] URLLoader - не стартует выгрузку (http://www.flasher.ru/forum/showthread.php?t=194756)

AlexCooper 21.02.2013 17:30

URLLoader - не стартует выгрузку
 
Здравствуйте. Пишу себе универсальную машину для работы с различными API соц. сетей. Сейчас остановила публикация записей на стену. Проблем с выгрузкой локально нет, но вот при удалённом тесте загрузка не стартует. Привожу код и логи операций, подскажите может кто-то явно видит где я допустил ошибку, а пока сам буду рыть.
Код AS3:

package multiapi.processor {
 
        import flash.geom.Matrix;
        import flash.geom.Rectangle;
 
        import flash.utils.ByteArray;
 
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.PixelSnapping;
        import flash.display.DisplayObject;
 
        import flash.events.Event;
 
        import flash.net.URLLoader;
        import flash.net.URLRequest;
        import flash.net.URLRequestHeader;
        import flash.net.URLRequestMethod;
 
        import com.adobe.images.JPGEncoder;
        import com.adobe.serialization.json.JSON;
 
        import multiapi.data.MultipartData;
        import multiapi.data.GlobalData;
 
        public class Poster {
 
                public function Poster() {
                        // constructor code
                }
 
                public function images($data:Object, user_id:String,options:Object,completeFunc:Function=null,failFunc:Function=null):void {
 
                        GlobalData.log.add('Images');
 
                        if (!options.quality) options.quality = 80;
 
                        options.url = (options.url) ? ','+options.url : '';
 
                        var jpg:JPGEncoder = new JPGEncoder(options.quality);
 
                        var ba:ByteArray = new ByteArray();
                                ba = jpg.encode( extractBmpd(options.image, 0, 0 , options.image.width, options.image.height) );
 
                        var urlRequest:URLRequest = new URLRequest($data.upload_url);
                                urlRequest.method = URLRequestMethod.POST;
                                urlRequest.requestHeaders.push(new URLRequestHeader("Content-type", "multipart/form-data; boundary=" + MultipartData.BOUNDARY));
 
                        var urlLoader = new URLLoader();
 
                        GlobalData.log.add('urlLoader');
 
                                urlLoader.addEventListener(Event.COMPLETE, function(event:Event):void {
 
                                                                                                  GlobalData.log.add('upload_complete');
 
                                                                                                  var callback:Object = JSON.decode(event.target.data);
 
                                                                                                GlobalData.log.add(callback);
 
                                                                                          GlobalData.api.multi.api("photos.saveWallPhoto",{server:callback.server,photo:callback.photo, hash:callback.hash}, function(data:Object):void {
                                                                                                                                                        GlobalData.log.add('start post');
                                                                                                                                                        GlobalData.log.add(data);
                                                                                                                                                        GlobalData.api.multi.api("wall.post",{owner_id:user_id,message:options.desc,attachments:data[0].id+options.url}, completeFunc, failFunc);
                                                                                                                                                }, failFunc);
                                                                                  });
                                urlLoader.addEventListener(Event.OPEN, function(event:Event):void { } );
 
                        var bitdata:MultipartData = new MultipartData();
                                bitdata.addFile(ba, "photo");
 
                                urlRequest.data = bitdata.data;
 
                        GlobalData.log.add('start load');
 
                                urlLoader.load(urlRequest);
 
                        GlobalData.log.add('starting');
                }
 
                private function extractBmpd( ARG_object:DisplayObject, ARG_x:Number, ARG_y:Number, ARG_width:Number, ARG_height:Number):BitmapData {
                        GlobalData.log.add('extractBmpd');
                        var cropArea:Rectangle = new Rectangle(0, 0, ARG_width, ARG_height);
 
                        var bmpd:BitmapData = new BitmapData(ARG_width, ARG_height);
 
                        var croppedBitmap:Bitmap = new Bitmap(bmpd, PixelSnapping.ALWAYS, true);
 
                        var cropMatrix:Matrix = new Matrix();
                        cropMatrix.translate(-ARG_x, -ARG_y);
 
                        bmpd.draw( ARG_object, cropMatrix, null, null, cropArea, true );
                        return bmpd;
                }
        }
}

Лог операций
Код:

posting for user > 16580191
url = http://vk.com/mind.battle
desc = текст
upload_url = http://cs307304.vkontakte.ru/upload.php?act=do_add&mid=16580191&aid=-14&gid=0&hash=1f1b790fe86d10bf6ab62fd04f6dd20f&rhash=4f6a5f8e293dbfacc8a661f06c337291&swfupload=1&api=1&wallphoto=1
aid = -14
mid = 16580191
Images
extractBmpd
urlLoader
start load
starting


GBee 21.02.2013 17:32

Так на остальные события подпишитесь.

iNils 21.02.2013 17:33

Анонимные функции - первый шаг к проблеме.

AlexCooper 21.02.2013 17:36

Старт публикации
Код AS3:

public function post(user_id:String,options:Object,callBackOk:Function=null,callBackFail=null):void {
 
                        GlobalData.log.add('posting for user > '+user_id);
                        GlobalData.log.add(options);
 
                        if (!callBackFail) callBackFail = onApiRequestFail;
 
                        multi.api("photos.getWallUploadServer", {"uid":user_id}, function(data:Object):void { GlobalData.log.add(data); GlobalData.poster.images(data,user_id,options,callBackOk,callBackFail) } , callBackFail);
                }

Все это является флеш-контейнером который подгружает внешний свф, у которого внутри
Код AS3:

wrapper.external.post(16580191, {'desc':'текст','image':spr, 'url':'http://vk.com/mind.battle'}, postOk, postFail ); break;

где соответственно spr - мувик с изображением для публикации

Добавлено через 9 минут
Подписался, говорит
Код:

errorHandler: [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048"]
Добавлено через 15 минут
Цитата:

Сообщение от iNils (Сообщение 1121678)
Анонимные функции - первый шаг к проблеме.

Использую анонимные функции для того чтобы отдавать им уникальные параметры и при асинхронном выполнению, данные в них были актуальны именно для этого обработчика. Как бы Вы поступили? Понимаю что нужно писать что-то типа реестра обработчиков но бывают внешние события без подписи (идентификатора), просто пришли данные и все, в таком случая я не знаю кто ждет на самом деле эти данные.

Добавлено через 20 минут
Код AS3:

Security.allowDomain("*");

не решил вопрос.

GBee 21.02.2013 17:57

Цитата:

Подписался, говорит
Ну вот

Цитата:

Использую анонимные функции для того чтобы отдавать им уникальные параметры и при асинхронном выполнению, данные в них были актуальны именно для этого обработчика. Как бы Вы поступили? Понимаю что нужно писать что-то типа реестра обработчиков но бывают внешние события без подписи (идентификатора), просто пришли данные и все, в таком случая я не знаю кто ждет на самом деле эти данные.
Можно Poster новый создавать каждый раз. И колбеки пихать в приватные переменные.

AlexCooper 21.02.2013 18:00

вот сижу и думаю.. может это у меня уже мозги поплавились.. ведь использую конструкцию
social network -> iframe -> my flash conteiner -> content
и просто напросто флеш запущенное не из домена (к примеру вконтакте) не сможет выгрузить картинку... Извините за возможно нелепые рассуждения день мозгового штурма был.

Добавлено через 2 минуты
Цитата:

Сообщение от GBee (Сообщение 1121685)
Можно Poster новый создавать каждый раз. И колбеки пихать в приватные переменные.

Спасибо за наводку, так даже более оптимальней нежели хранить статически постер

caseyryan 21.02.2013 19:41

возможно дело банально в файле crossdomain.xml. Прописаны ли там домены *.userapi.com и userapi.com?
Картинки ведь контактовские теперь там хранятся

AlexCooper 21.02.2013 19:58

Цитата:

Сообщение от caseyryan (Сообщение 1121697)
возможно дело банально в файле crossdomain.xml. Прописаны ли там домены *.userapi.com и userapi.com?
Картинки ведь контактовские теперь там хранятся

На своем сервере?

Получается так, что у меня iframe. У меня флеш генерит картинку и потом пытается выгрузить на сервер и в этот момент не проходит по безопасности. Я могу передать из флеша в джаваскрипт картинку чтобы тот выгрузил?

caseyryan 21.02.2013 20:06

Цитата:

На своем сервере?
ну само собой

AlexCooper 21.02.2013 20:09

Цитата:

Сообщение от caseyryan (Сообщение 1121702)
ну само собой

у меня вообще стоит * в кросс домене.

Добавлено через 5 минут
Цитата:

Сообщение от caseyryan (Сообщение 1121702)
ну само собой

у Вас ифреймовское приложение выгружает из флеша картинки на сервера вк?


Часовой пояс GMT +4, время: 00:54.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.