Страница 1 из 2

Помогите понять принцип

Добавлено: 04 май 2012, 13:57
gaponj88
Задача, из приложения создать альбом, у пользователя,залить фотку которую он выбрал, узнать адрес ее и запостить на стену !Делаю так:

Код: Выделить всё

 VK.api('photos.createAlbum', { title:"бла-бла-бла"}, load_succes,oError);   private function load_succes(data: Object):void{"Альбом создан, сразу же узнаем адрес "VK.api('photos.getUploadServer', { aid:data.aid}, load_succes_2,oError);}private function load_succes_2(data: Object):void{   "Отправляем пост запрос:"var sender:URLRequest = new URLRequest(data.upload_url);var vars:URLVariables = new URLVariables();var urlLoader:URLLoader = new URLLoader();sender.method = URLRequestMethod.POST;vars['file1'] = "Вот здесь вставляю ссылку на изображение которое выбрал пользователь";sender.data = vars;urlLoader.load(sender);urlLoader.addEventListener(Event.COMPLETE, sendPicToServerHandler); }function sendPicToServerHandler(event:Event):void { var json_data68:Object=JSON.decode(urlLoader.data);"Пытаюсь сохранить  это фото, но приходит пустой ответ с photos_list"VK.api('photos.save', { aid:json_data68.aid,server:json_data68.server,hash:json_data68.hash,photos_list:json_data68.photos_list}, load_succes_3,oError);}
Пытаюсь сохранить это фото, но приходит пустой ответ с photos_list , вот куда мне надо вставлять эту ссылку, чтобы потом пришел с сервера ответ не пустой а с фото ! Или что-то не так делаю?
Повторюсь фото все лежат у меня в альбоме, из этого альбома мне нужно брать это фото и сохранить в созданном альбоме у пользователя !Т.е не брать файл с компа и грузить в альбом ! Буду очень благодарен

Re: Помогите понять принцип

Добавлено: 04 май 2012, 15:17
Alazaur
Ну принцип так принцип :D
Грузишь лоадером фотку в свое приложение из альбома, с сервера не суть важно откуда, хоть в самом приложении из мувика картинку делай.
Перекодируешь ее в битовый массив классом PNGEncoder или другим ему подобным и потом уже этот массив отправляешь.

Re: Помогите понять принцип

Добавлено: 04 май 2012, 15:43
gaponj88
Т.е проблемма в том что в пост запросе не льзя тупо ссылку на фото вставлять?Тупо кодировать, и что то на подобии img.jpg в посте отправлять?Правильно?

Re: Помогите понять принцип

Добавлено: 04 май 2012, 18:44
Alazaur
Да отправлять надо не ссылку на файл, а сам файл.

Re: Помогите понять принцип

Добавлено: 05 май 2012, 10:00
gaponj88
Блин ну вообще одалела меня эта тема, вот что у мя сдесь не так?
Гружу картинку лоадером:

Код: Выделить всё

function send_btnClick(e:MouseEvent):void {var loadere:Loader = new Loader();var url:String = "адрес картинки.jpg";var urlReq:URLRequest = new URLRequest(url);loadere.load(urlReq);loadere.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);   }
Тут все норм,листер срабатывает дальше:

Код: Выделить всё

function loadComplete(e:Event):void {    var bit:Bitmap = e.target.content;    pngStream = PNGEncoder.encode(bit.bitmapData);    VK.api('wall.getPhotoUploadServer',{}, responseFromServer,onError);    var ld:Loader = new Loader();    ld.loadBytes(pngStream);}
Вот здесь начинается, с бип мапом
Дальше код не идет, доходит до :

Код: Выделить всё

VK.api('wall.getPhotoUploadServer',{}, responseFromServer,onError);
И все, блин подскажите как правильно, достать из загруженной картинки битмапу и перекодировать, чтобы потом отправить на сервер?

Re: Помогите понять принцип

Добавлено: 05 май 2012, 10:51
Alazaur

Код: Выделить всё

package {    import com.adobe.images.PNGEncoder;    import com.adobe.serialization.json.JSON;    import flash.display.BitmapData;    import flash.display.Loader;    import flash.display.Sprite;    import flash.events.Event;    import flash.net.URLLoader;    import flash.net.URLRequest;    import flash.net.URLRequestHeader;    import flash.net.URLRequestMethod;    import vk.APIConnection;        /**     * ...     * @author Irbis     */    public class Main extends Sprite     {        private var flashVars:Object;        private var VK:APIConnection;        private var image:BitmapData;                public function Main():void         {            if (stage) init();            else addEventListener(Event.ADDED_TO_STAGE, init);        }                private function init(e:Event = null):void         {            removeEventListener(Event.ADDED_TO_STAGE, init);            flashVars = stage.loaderInfo.parameters as Object;            VK = new APIConnection(flashVars);                        var _loader:Loader = new Loader();            var _request:URLRequest = new URLRequest("my.png");            _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);            _loader.load(_request);        }                private function loadComplete(e:Event):void {            image = BitmapData(e.target.content.bitmapData);            VK.api('photos.getWallUploadServer', '', getedPhotoUploadServer, vkErrors);        }                private function getedPhotoUploadServer(obj:Object):void {            var _loader:URLLoader = new URLLoader();            var _request:URLRequest = new URLRequest(obj.upload_url);            _request.method = URLRequestMethod.POST;            _request.requestHeaders.push(new URLRequestHeader("Content-type", "multipart/form-data; boundary=" + MultipartData.BOUNDARY));            var _data:MultipartData = new MultipartData();            _data.addFile(PNGEncoder.encode(image), "photo");            _request.data=_data.data;            _loader.addEventListener(Event.COMPLETE, imageLoaded);            _loader.load(_request);        }                private function imageLoaded(e:Event):void {            var _obj:Object = JSON.decode(e.target.data);            VK.api('photos.saveWallPhoto', {server:_obj.server, photo:_obj.photo, hash:_obj.hash}, imageSaved, vkErrors);        }                private function imageSaved(obj:Object):void {                    }                private function vkErrors(obj:Object):void {}    }    }
Комментариев по коду не делал, но думаю разберетесь, ибо вы уже и сами к этому подошли :)

Re: Помогите понять принцип

Добавлено: 05 май 2012, 16:43
gaponj88
Alazaur

Код: Выделить всё

private function loadComplete(e:Event):void {            image = BitmapData(e.target.content.bitmapData);            VK.api('photos.getWallUploadServer', '', getedPhotoUploadServer, vkErrors);        }
Вот я так и думал, здесь тоже самое, вот на этой строчке код застывает:

Код: Выделить всё

 image = BitmapData(e.target.content.bitmapData);
Как только не пробывал...Мне кажется что он не может обработать картинку по ссылке, но как тогда быть?

Re: Помогите понять принцип

Добавлено: 05 май 2012, 18:53
Alazaur
gaponj88, у меня не застывает, фотка успешно загружается))) А задержка в исполнении будет так и так, ведь картинка не может мгновенно загрузиться с вашего сервера в приложение, а потом из приложения на сервер вконтакта. Пользователю нужно показать, чтобы подождал. Я предпочитаю в это время курсор заменять на часы или крутящееся кольцо, но можно и просто сообщением вывести.

Re: Помогите понять принцип

Добавлено: 05 май 2012, 19:08
gaponj88
Alazaur
Да не так и есть, когда фото загрузиться то:

Код: Выделить всё

private function loadComplete(e:Event):void {            image = BitmapData(e.target.content.bitmapData);            VK.api('photos.getWallUploadServer', '', getedPhotoUploadServer, vkErrors);        }
Но сдесь то чего ждать?Тут у мя и встает именно на этом:

Код: Выделить всё

 image = BitmapData(e.target.content.bitmapData);
Пробывал так:

Код: Выделить всё

var image:Bitmap = Bitmap(e.target.content);    var bitmapData:BitmapData = image.bitmapData;
Не катит, все что можно перепробывал, не хочет после бипмапы работать и все тут((

Re: Помогите понять принцип

Добавлено: 05 май 2012, 19:10
Alazaur
А вы локально тестируете или после загрузки вконтакт?