Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.07.2010, 17:32
zemozes вне форума Посмотреть профиль Отправить личное сообщение для zemozes Найти все сообщения от zemozes
  № 1  
Ответить с цитированием
zemozes
 
Аватар для zemozes

Регистрация: Jul 2010
Сообщений: 99
По умолчанию Как сформировать post запрос?

Как сформировать post запрос?
Получаю миниатюру картинки из интернета, с кроссдоменником всё нормально.
Вывожу на флешку, миниатюру показывает.
По этой маленькой картинке кликаю, загружается большая, её тоже показывает.
И тут надо загрузить эту большую картинку в фотоальбом Вконтакте,
именно это не получается.
Читал доки вконтакте по вк api.
Прочитал "Процесс загрузки файлов на сервер ВКонтакте" http://vkontakte.ru/page2372787
Там 3 этапа.
Первый этап успешен. Получил http-адрес для загрузки фотографий, проверил, этот адрес
такой же как в примере http://vkontakte.ru/pages.php?o=-1&p...etUploadServer

Теперь этап второй: Приложение формирует POST-запрос на полученный адрес.
Именно это и не получается.
Искал на этом форуме, похожие темы поднимались.
Пробовал:
UploadPostHelper
ru.inspirit.net.MultipartURLLoader;
http://www.flasher.ru/forum/showthread.php?t=140804
http://blog.inspirit.ru/?p=139
http://www.flasher.ru/forum/showthread.php?t=136249
http://www.adobe.com/livedocs/flash/...Reference.html (там пример запроса)
http://vkontakte.typing.by/
и другие темы с этого форума.

Ничего не помогло. Несколько дней мучаюсь.
Самое главное, что с вк api научился взаимодействовать, но вот только post запрос не могу составить.
Есть bitmap data большой картинки, переменная bmpd.

Код AS3:
//С помощью метода photos.getUploadServer узнали http-адрес для загрузки фотографий
var xml:XML = new XML(myLoader.data);
//var xml:XML = new XML(evt.target);
tf.text = tf.text + "\r\n xml.elements(upload_url)="+xml.elements("upload_url")+"\r\n"
+"___qwe_"+xml.elements("upload_url").toString()+" \r\n ";
 
//теперь формируем post-запрос на полученный адрес.  
var jpgEncoder:JPGEncoder= new JPGEncoder();
var bArray:ByteArray= jpgEncoder.encode(bmpd);// bmpd - готовая bitmap data
 
var myRequest:URLRequest = new URLRequest(xml.elements("upload_url").toString());
var myLoader1:URLLoader = new URLLoader();
var myVariables:URLVariables = new URLVariables();
 
myLoader1.dataFormat = URLLoaderDataFormat.BINARY;
//myVariables.file1 = bArray;
//myRequest.data = myVariables;
myRequest.data = bArray;
myRequest.contentType = 'multipart/form-data; boundary=' + UploadPostHelper.getBoundary();
myRequest.requestHeaders.push(new URLRequestHeader("Content-type", "application/octet-stream"));
myRequest.method = URLRequestMethod.POST;
myRequest.requestHeaders.push( new URLRequestHeader( 'Cache-Control', 'no-cache' ) );
 
myLoader1.addEventListener(Event.COMPLETE, 
function (evt:Event):void {
tf.text = tf.text + "\r\n " + "evt.target="+evt.target.data;
}
);
myLoader1.load(myRequest);
В текстовом поле выдаёт:
Цитата:
testsdfwefwef0_1_2_
tmp_mc.image_url=http://site.ru/big_img.jpg

xml.elements(upload_url)=http://cs600.vkontakte.ru/upload.php?act=do_add&mid=264***&aid=655***&gid=0&hash=4215***&rhash=7e63039c045***&swfupload=1&api=1

___qwe_http://cs600.vkontakte.ru/upload.php?act=do_add&mid=264***&aid=655***&gid=0&hash=42157***&rhash=7e6303***&swfupload=1&api=1
Поймите, я не из тех, кто "сделайте за меня и дайте готовое на блюдечке с каёмочкой".
Я прошу совета, как сформировать этот проклятый post запрос?


Последний раз редактировалось zemozes; 18.07.2010 в 17:39.
Старый 18.07.2010, 17:50
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
http://code.google.com/p/v-kontakte/...otoUploader.as
Надеюсь, код еще актуальный

Старый 18.07.2010, 19:26
zemozes вне форума Посмотреть профиль Отправить личное сообщение для zemozes Найти все сообщения от zemozes
  № 3  
Ответить с цитированием
zemozes
 
Аватар для zemozes

Регистрация: Jul 2010
Сообщений: 99
Скачал http://code.google.com/p/v-kontakte/...otoUploader.as
Не помогло. В текстовом поле выдало то же самое, что я написал в первом посте.

Код AS3:
//теперь формируем post-запрос на полученный адрес.
var vk_main:Vkontakte = new Vkontakte();
vk_main.isTestMode=false;
vk_main.privateKey = 'вырезано';
var fu:PhotoUploader = new PhotoUploader(vk_main);
 
var jpgEncoder:JPGEncoder= new JPGEncoder();
var bArray:ByteArray= jpgEncoder.encode(bmpd);// bmpd - готовая bitmap data
 
fu.files.push(bArray);
fu.addEventListener(by.typing.vkontakte.events.LoaderEvent.UPLOAD_COMPLETE,
function (e:by.typing.vkontakte.events.LoaderEvent):void{
tf.text = "123";
});
fu.upload('123456', false);
Добавлено через 3 минуты
privateKey я задал. А как задать api_id нету. Ввожу vk_main, нажимаю точку, а ничего похожего на api_id нету. Да, выдаёт список свойств, но там нету api_id.

Старый 19.07.2010, 00:46
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 4  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Посмотри примеры в группе http://vkontakte.ru/club13587210

Старый 19.07.2010, 09:03
zemozes вне форума Посмотреть профиль Отправить личное сообщение для zemozes Найти все сообщения от zemozes
  № 5  
Ответить с цитированием
zemozes
 
Аватар для zemozes

Регистрация: Jul 2010
Сообщений: 99
udaaff, я вверху писал, что не могу указать api_id.
Всё гениальное просто
Код AS3:
vk_main.applicationParameters.api_id
Я то думал, что просто vk_main.api_id.
Самому смешно.

Добавлено через 1 час 38 минут
Цитата:
Сообщение от udaaff Посмотреть сообщение
Посмотри примеры в группе http://vkontakte.ru/club13587210
Читаю http://vkontakte.ru/topic-13587210_22302916
Код AS3:
photoLoader = new PhotoLoader(vkontakte);
photoLoader.addEventListener(VkontakteErrorEvent.ERROR, errorHandler);
photoLoader.files = [ new JPGEncoder(100).encode(bmd) ];
photoLoader.upload("id альбома");
Не получилось.

Сделал
Цитата:
В классе PhotoLoader исправьте
urlRequest.contentType = "multipart/form-data; boundary=" + MultipartData.BOUNDARY;
на
urlRequest.requestHeaders.push(new URLRequestHeader("Content-type", "multipart/form-data; boundary=" + MultipartData.BOUNDARY));
Компилирую, вылезла ошибка
Цитата:
Для получения более подробных сведений см. дополнительную информацию.
При создании объекта flickr.as возникли ошибки или предупреждения.
PhotoLoader.as: Вызов предположительно неопределенного метода URLRequestHeader.
;

Старый 19.07.2010, 11:06
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 6  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
udaaff, я вверху писал, что не могу указать api_id.
Его в ручную, вообще, не нужно задавать.
Код AS3:
if (stage.loaderInfo.parameters.viewer_id)
    _parameters = new ApplicationParameters(stage.loaderInfo.parameters);
else
    _parameters = new ApplicationParameters(TEST_PARAMS);
 
_vkontakte = Vkontakte.getInstance();
_vkontakte.applicationParameters = _parameters;
_vkontakte.privateKey = "jpdkpTMeoQ";
_vkontakte.isTestMode = true;
_vkontakte.setLockDelay(2000);
Цитата:
Сообщение от zemozes Посмотреть сообщение
Читаю http://vkontakte.ru/topic-13587210_22302916
Код AS3:
photoLoader = new PhotoLoader(vkontakte);
photoLoader.addEventListener(VkontakteErrorEvent.ERROR, errorHandler);
photoLoader.files = [ new JPGEncoder(100).encode(bmd) ];
photoLoader.upload("id альбома");
Не получилось.

Сделал
Компилирую, вылезла ошибка
Исправлять там ничего не надо уже, вроде как, исправлено.

Старый 19.07.2010, 11:19
zemozes вне форума Посмотреть профиль Отправить личное сообщение для zemozes Найти все сообщения от zemozes
  № 7  
Ответить с цитированием
zemozes
 
Аватар для zemozes

Регистрация: Jul 2010
Сообщений: 99
Код AS3:
var vk_main:Vkontakte = Vkontakte.getInstance();
var _parameters:by.typing.vkontakte.ApplicationParameters = new ApplicationParameters(stage.loaderInfo.parameters);
vk_main.applicationParameters = _parameters;
vk_main.privateKey = "";
vk_main.isTestMode=false;
vk_main.setLockDelay(2000);
//var fu:PhotoUploader = new PhotoUploader(vk_main);
 
var fl:PhotoLoader = new PhotoLoader(vk_main);
fl.addEventListener(VkontakteErrorEvent.ERROR, 
function(e:VkontakteErrorEvent):void{tf.text = "123";});
fl.addEventListener(by.typing.vkontakte.events.LoaderEvent.UPLOAD_COMPLETE,
function(e:VkontakteErrorEvent):void{tf.text = "123";});
fl.files = [ new JPGEncoder(100).encode(bmpd) ];
fl.upload("65511528");
В текстовом поле должно быть 123, а в нём только то, что я писал в первом посте.

Добавлено через 34 секунды
То есть опять не получилось.
Мне нужно всего лишь составить post запрос,
уже прочитано http://www.hostmake.ru/articles/php_perl/645/

Добавлено через 2 минуты
В php я делал post запросы, как их сделать на as3?

Добавлено через 9 минут
Мне нужно самому составить post запрос целиком, вместе с заголовками, с границами (boundary).
Как тут http://www.hostmake.ru/articles/php_perl/645/


Последний раз редактировалось zemozes; 19.07.2010 в 11:23.
Старый 19.07.2010, 12:50
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 8  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
У меня для загрузки работает вот этот код (imageContent, serverResponse, saverURL - переменные класса, в первую записывается изображение перед началом загрузки)

Код AS3:
private function imageForAlbumUploadStart(e:MouseEvent) {
 
	var fileContentType:String = 'image/jpeg';
	var mpLoader:MultipartURLLoader = new MultipartURLLoader();
	mpLoader.addEventListener(Event.COMPLETE, imageForAlbumUploaded);	
	mpLoader.addFile(imageContent, "image.jpg", "file1", fileContentType);
	mpLoader.load(saverURL);					
 
}
 
private function imageForAlbumUploaded(e:Event) {
 
	serverResponse = JSON.decode( e.currentTarget.loader.data ); 
	trace("serverResponseDecoded: ", serverResponse.server, serverResponse.photos_list, serverResponse.hash);
 
}


Последний раз редактировалось mikhailk; 19.07.2010 в 12:52.
Старый 19.07.2010, 16:17
zemozes вне форума Посмотреть профиль Отправить личное сообщение для zemozes Найти все сообщения от zemozes
  № 9  
Ответить с цитированием
zemozes
 
Аватар для zemozes

Регистрация: Jul 2010
Сообщений: 99
mikhailk, большое спасибо. Помогло, но ответ не очень соответствует описанию, которое описано тут "Процесс загрузки файлов на сервер ВКонтакте".
Цитата из http://vkontakte.ru/page2372787
Цитата:
В ответ приложение получает следующие данные в формате JSON:
{"server": '1', "photos_list": '2,3,4', "aid": '5', "hash": '12345abcde'}
А я получил такой ответ:
Цитата:
e.currentTarget.loader.data={"server": "600", "photos_list": "5abec23d2b:x", "aid": "65*", "hash": "ae98*"}
Звёздочки я сам дописал, чтобы скрыть приватные данные.

То есть раньше photos_list был "" (пустой), а теперь "5abec23d2b:x".
Хотя в доке написано, что должно быть "photos_list": '2,3,4' (понятно, что цифры другие могут быть).
Но у меня не цифры, а буквы с цифрами и знак двоеточие.

Ваш код чуток переделал для совместимости со своим.
В xml.elements(upload_url) у меня содержится http-адрес для загрузки фотографий (подчёркивание дописал для удобства, а то форум скрывает часть ссылки).
Цитата:
ht_tp://cs600.vkontakte.ru/upload.php?act=do_add&mid=26*&aid=65*&gid=0&hash=42*&rhash=7e*&swfupload=1&api=1
Код AS3:
var fileContentType:String = 'image/jpeg';
var mpLoader:MultipartURLLoader = new MultipartURLLoader();
mpLoader.addEventListener(Event.COMPLETE, imageForAlbumUploaded);	
mpLoader.addFile(bArray, "image.jpg", "file1", fileContentType);
mpLoader.load(xml.elements("upload_url").toString());	
function imageForAlbumUploaded(e:Event) {
//serverResponse = JSON.decode( e.currentTarget.loader.data ); 
//trace("serverResponseDecoded: ", serverResponse.server, serverResponse.photos_list, serverResponse.hash);
tf.text = tf.text + "\r\n e.currentTarget.loader.data=" + e.currentTarget.loader.data;
}


Последний раз редактировалось zemozes; 19.07.2010 в 16:21.
Старый 19.07.2010, 16:43
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 10  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Попробуйте JSON, который возвращает сервер, не особо задумываясь, распарсить на параметры и скормить их photos.save (http://vkontakte.ru/pages.php?o=-1&p=photos.save).

Я свой код отлаживал почти полгода назад. Тогда ответ сервера соответствовал спецификации, но они там постоянно что-то меняют.

Сам код рабочий.

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:25.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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