Страница 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
Ну принцип так принцип
Грузишь лоадером фотку в свое приложение из альбома, с сервера не суть важно откуда, хоть в самом приложении из мувика картинку делай.
Перекодируешь ее в битовый массив классом 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
А вы локально тестируете или после загрузки вконтакт?