ByteArray сохранить в альбом api 3.0

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в Flash-приложениях (ActionScript)
Ответить
Аватара пользователя
Евгений
FL Team
FL Team
Сообщения: 776
Зарегистрирован: 10 июн 2010, 11:01

ByteArray сохранить в альбом api 3.0

Сообщение Евгений »

Всем привет) На форуме много тем о том, как сохранять фото в альбом ВКонтакт, а именно как сохранить фото закодированное в ByteArray ...но все эти темы уже устарели, т.к. api 2.0 больше не актуален...Поэтому я создал новую тему, в которой хочу задать вопрос...на который сам пока не смог ответить...
------------------------
В общем как сохранить фото в альбом из ByteArray?!
Вот кусок кода по сохранению фото в альбом на api 3.0:

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

function getAlbumsHandler2(e:Object):void{    aid = e.aid; // Берем самый первый альбом, реализуй выбор альбома согласно потребностям приложения    VK.api("photos.getUploadServer",{"aid":aid},getUploadServerHandler,failHandler);}        function getUploadServerHandler(e:Object):void{    var urlrequest:URLRequest = new URLRequest(e.upload_url);    urlrequest.method = URLRequestMethod.POST;    fileref.upload(urlrequest,"file1");    fileref.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, fileLoadedHandler);}        function fileLoadedHandler(e:DataEvent):void{    VK.api("photos.save", JSON.decode(e.data), endUpload);}
А вот моя картинка, закодированная в ByteArray:

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

var bitmapData:BitmapData = new BitmapData(pic.width,pic.height,false,0xffffff);bitmapData.draw(pic);var jpgEnc:PNGEncoder = new PNGEncoder();var bytes:ByteArray = PNGEncoder.encode(bitmapData);
Как быть?!)) Кто поможет - буду очень, очень благодарен)
Аватара пользователя
Евгений
FL Team
FL Team
Сообщения: 776
Зарегистрирован: 10 июн 2010, 11:01

Re: ByteArray сохранить в альбом api 3.0

Сообщение Евгений »

Пробовал так:

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

function getUploadServerHandler(e:Object):void{    var urlrequest:URLRequest = new URLRequest(e.upload_url);    urlrequest.method = URLRequestMethod.POST;    VK.api("photos.save", JSON.decode(bytes.toString()));}
Не выходит... :(
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: ByteArray сохранить в альбом api 3.0

Сообщение Александр »

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

photoLoader=new MultipartURLLoader();photoLoader.addEventListener(Event.COMPLETE,onUploadComplete);photoLoader.addFile(byte_arr,"photo.png","photo");photoLoader.load(upload_url);
Аватара пользователя
Евгений
FL Team
FL Team
Сообщения: 776
Зарегистрирован: 10 июн 2010, 11:01

Re: ByteArray сохранить в альбом api 3.0

Сообщение Евгений »

Александр, почти разобрался...переписал всё заново, без JSON...получилось создать альбом, узнать http-адрес для загрузки фотографии...теперь осталось сформировать POST-запрос и сохранить фото в альбом...
Перепробовал все коды, которые есть на форумах...в том числе и ваш ↑..ничего не выходит...
 Сам написал POST-зпрос - работает, но не до конца!
Попробовал сам написать POST-запрос, по другому..вот так:

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

//Составляем POST-запросfunction getUploadServerHandler(data:Object):void{    var loader = new URLLoader();    loader.load(new URLRequest(urlrequest)); //urlrequest - это ссылка    loader.addEventListener(Event.COMPLETE, onLoaded);    function onLoaded(e:Event)    {        VK.api("photos.save", loader.data, onUploadComplete);    }}
Получилось получить вот такой ответ:

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

{"server": "10002", "photos_list": "", "aid": "137478936", "hash": "2a16dd14c7d24423ea1db7cb04071869"}
photos_list - пустой..т.к. пока, что не знаю как его отправить...Думаю если его отправить должно работать...как быть?)
---------------------------
А вот другой вариант собрал, думаю он получше...но почему-то не работает...

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

var urlrequest;var loader;var mll:MultipartURLLoader;//Составляем POST-запросfunction getUploadServerHandler(data:Object):void{    urlrequest = data['upload_url'];     mll = new MultipartURLLoader();    mll.addEventListener(Event.COMPLETE, onUploadComplete);    mll.addFile(bytes, "file.jpg", "file1", 'image/jpg');    mll.load(urlrequest);}//Сохраняем фото в альбомfunction onUploadComplete(event:Event):void{    var answer:String = mll.loader.data;    var data:Object = JSON.decode(answer);    VK.api('photos.save', {aid: viewer_id, server:data.server, photo:data.photo, hash:data.hash }, onUploadComplete2, onError);}function onUploadComplete2(data){    id_albums.text = "Успешно сохранено!";}function onError(data: Object):void{    id_albums.text = "Ошибка: " + data.error_msg;}
доходит до листенера:

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

mll.addEventListener(Event.COMPLETE, onUploadComplete);
И дальше почему-то не идёт...в чём может быть проблема?..
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: ByteArray сохранить в альбом api 3.0

Сообщение Александр »

Вот посмотри, отправляет фотографию в альбом группы

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

/* http://flapps.ru/forum/ - форум о создании приложений */package {    import flash.net.*;    import flash.display.*;    import flash.events.*;    import flash.text.*;    import vk.*;    import vk.api.serialization.json.*;    import flash.utils.ByteArray;      public class Main extends Sprite    {        public var api_id:Number;        public var viewer_id:Number;        public var sid:String;        public var secret:String;        public var photoLoader:MultipartURLLoader;        public var VK:APIConnection;                public function Main()        {            var flashVars:Object = stage.loaderInfo.parameters as Object;            // присваиваем переменным значения из flashVars            api_id = flashVars['api_id'];            viewer_id = flashVars['viewer_id'];            sid = flashVars['sid'];            secret = flashVars['secret'];             // для тестирования локально            flashVars['api_id'] = 1728947;            flashVars['viewer_id'] = 1306422;            flashVars['sid'] = 'a1006fd1e8gb9bd669e1119280166bc6cb9110b8a111550333bf041301';            flashVars['secret'] = '7ef8l6a4p8';             VK = new APIConnection(flashVars);            VK.api('photos.getUploadServer', {aid:108514869,gid:17157755}, onGetUploadServer, onError);        }         private function onGetUploadServer(data: Object):void        {            var upload_url = data['upload_url'];            // загружаем фото, передав его по полученной ссылке            var bitmap_data:BitmapData = new BitmapData(mc.width,mc.height);            bitmap_data.draw(mc);            var byte_arr:ByteArray = PNGEncoder.encode(bitmap_data);             photoLoader=new MultipartURLLoader();            photoLoader.addEventListener(Event.COMPLETE,onUploadComplete);            photoLoader.addFile(byte_arr,"photo.png","photo");            photoLoader.load(upload_url);          }         // фото загружено на сервер        public function onUploadComplete(event:Event):void        {            var response = JSON.decode(event.currentTarget.loader.data);            VK.api('photos.save', {aid:response.aid,server:response.server,photos_list:response.photos_list,hash:response.hash,gid:17157755}, onPhotosSave, onError);        }         private function onPhotosSave(data: Object):void        {            trace(data);        }         private function onError(data: Object):void        {            result_tf.text = data.error_msg;        }    }}
Аватара пользователя
Евгений
FL Team
FL Team
Сообщения: 776
Зарегистрирован: 10 июн 2010, 11:01

Re: ByteArray сохранить в альбом api 3.0

Сообщение Евгений »

Александр, ваш код почти схожий с моим..но не тот, не тот не работает...http-адрес узнает, а дальше не идёт...
Александр, я вам кинул исходник в личку... :) Если не сложно посмотрите...
Amigo-pe
Сообщения: 1
Зарегистрирован: 25 май 2012, 13:07

Re: ByteArray сохранить в альбом api 3.0

Сообщение Amigo-pe »

Ребята ну почему никто из тех,у кого получилось загрузить фотографии в альбом вконтакте никак не сделает урок? вам что туполень или жалко?

Сделайте урок "ОТ" и "ДО" чтоб было понятно,а не просто куски кода. спасибо за внимание 8-)
Emeltil
Сообщения: 298
Зарегистрирован: 26 мар 2011, 15:29

Re: ByteArray сохранить в альбом api 3.0

Сообщение Emeltil »

Amigo-pe писал(а):Ребята ну почему никто из тех,у кого получилось загрузить фотографии в альбом вконтакте никак не сделает урок? вам что туполень или жалко?

Сделайте урок "ОТ" и "ДО" чтоб было понятно,а не просто куски кода. спасибо за внимание 8-)
также бы пригодилось
Abdul-Ibn-Abusheih
ЗАБАНЕН!
Сообщения: 430
Зарегистрирован: 02 мар 2012, 19:15

Re: ByteArray сохранить в альбом api 3.0

Сообщение Abdul-Ibn-Abusheih »

туполень
Ответить