Страница 1 из 1
ByteArray сохранить в альбом api 3.0
Добавлено: 22 июн 2011, 15:58
Евгений
Всем привет) На форуме много тем о том, как сохранять фото в альбом ВКонтакт, а именно как сохранить фото закодированное в 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);
Как быть?!)) Кто поможет - буду очень, очень благодарен)
Re: ByteArray сохранить в альбом api 3.0
Добавлено: 22 июн 2011, 19:04
Евгений
Пробовал так:
Код: Выделить всё
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()));}
Не выходит...
Re: ByteArray сохранить в альбом api 3.0
Добавлено: 22 июн 2011, 21:32
Александр
Код: Выделить всё
photoLoader=new MultipartURLLoader();photoLoader.addEventListener(Event.COMPLETE,onUploadComplete);photoLoader.addFile(byte_arr,"photo.png","photo");photoLoader.load(upload_url);
Re: ByteArray сохранить в альбом api 3.0
Добавлено: 23 июн 2011, 14:05
Евгений
Александр, почти разобрался...переписал всё заново, без 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);
И дальше почему-то не идёт...в чём может быть проблема?..
Re: ByteArray сохранить в альбом api 3.0
Добавлено: 23 июн 2011, 21:25
Александр
Вот посмотри, отправляет фотографию в альбом группы
Код: Выделить всё
/* 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; } }}
Re: ByteArray сохранить в альбом api 3.0
Добавлено: 24 июн 2011, 08:52
Евгений
Александр, ваш код почти схожий с моим..но не тот, не тот не работает...http-адрес узнает, а дальше не идёт...
Александр, я вам кинул исходник в личку...
Если не сложно посмотрите...
Re: ByteArray сохранить в альбом api 3.0
Добавлено: 03 июл 2012, 14:41
Amigo-pe
Ребята ну почему никто из тех,у кого получилось загрузить фотографии в альбом вконтакте никак не сделает урок? вам что туполень или жалко?
Сделайте урок "ОТ" и "ДО" чтоб было понятно,а не просто куски кода. спасибо за внимание
Re: ByteArray сохранить в альбом api 3.0
Добавлено: 03 июл 2012, 16:13
Emeltil
Amigo-pe писал(а):Ребята ну почему никто из тех,у кого получилось загрузить фотографии в альбом вконтакте никак не сделает урок? вам что туполень или жалко?
Сделайте урок "ОТ" и "ДО" чтоб было понятно,а не просто куски кода. спасибо за внимание
также бы пригодилось
Re: ByteArray сохранить в альбом api 3.0
Добавлено: 03 июл 2012, 18:04
Abdul-Ibn-Abusheih
туполень