Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Загрузка изображения на стену пользователя (http://www.flasher.ru/forum/showthread.php?t=140804)

RAlfDog 08.06.2010 16:53

Загрузка изображения на стену пользователя
 
Шаг 1:
Получаю адрес сервера (метод wall.getPhotoUploadServer)
http://cs857.vkontakte.ru/upload.php...71&swfupload=1
всё ок.



Шаг 2:
формирую POST запрос на сервер:
Код AS3:

static private function sendPicToServer(pic:BitmapData, url:String)
{
 var sender:URLRequest = new URLRequest(url);
 var vars:URLVariables = new URLVariables();
 var img_to_post:ByteArray = new JPGEncoder(85).encode(pic);
 vars.photo = img_to_post;
 sender.data = vars;
 sender.method = URLRequestMethod.POST;
 urlLoader = new URLLoader();
 urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
 urlLoader.addEventListener(Event.COMPLETE, sendPicToServerHandler);
 try {
  urlLoader.load(sender);
 } catch (e:Error) {
  trace(e);
 }
}

и отправляю.

Получаю ответ от сервера Вконтакте, в котором поле photo пустое:
Код:


{"mid": "85662523", "gid": "0", "server": "857", "photo": "", "hash": "dfc0d4bf10b93a3cb993a0a59e3b7c5a"}

Что это значит???



Шаг 3:
Отправляю запрос wall.savePost,
кладу в него всё что нужно,
в ответ приходит:
Код:


<error>
 <error_code>129</error_code>
 <error_msg>Invalid photo</error_msg>
 <request_params list="true">
  <param>
  <key>message</key>
  <value>Приглашение</value>
  </param>
  <param>
  <key>v</key>
  <value>2.0</value>
  </param>
  <param>
  <key>sig</key>
  <value>8b9cf790a303883cbb2edfd5023b0df1</value>
  </param>
  <param>
  <key>api_id</key>
  <value>1886535</value>
  </param>
  <param>
  <key>hash</key>
  <value>dfc0d4bf10b93a3cb993a0a59e3b7c5a</value>
  </param>
  <param>
  <key>method</key>
  <value>wall.savePost</value>
  </param>
  <param>
  <key>wall_id</key>
  <value>33099162</value>
  </param>
  <param>
  <key>server</key>
  <value>857</value>
  </param>
  <param>
  <key>test_mode</key>
  <value>1</value>
  </param>
 </request_params>
</error>


В чём проблема не пойму???

petri 08.06.2010 17:00

Ну так у тебя же photo пустой, что ты отправляешь ?

RAlfDog 08.06.2010 17:29

Вовсе нет,
не пуст он!
проверял.

поменял
Код AS3:

var img_to_post:ByteArray = new JPGEncoder(85).encode(pic);

на
Код AS3:

var img_to_post:ByteArray = PNGEncoder.encode(pic);

не работает

размер бинарной картинки при передаче на сервер: 101903 байт

etc 09.06.2010 10:53

Значит неправильно составлен запрос при аплоаде. Как минимум он должен быть multipart/form-data.

RAlfDog 09.06.2010 13:15

Спасибо etc!
Нашел тему по моему вопросу - http://blog.inspirit.ru/?p=139

Решение найдено!
Код AS3:

 
import MultipartURLLoader;
import JSON;
 
static private var mpLoader:MultipartURLLoader;
 
static private function sendPicToServer(pic:BitmapData, url:String)
  {
  var img_to_post:ByteArray = PNGEncoder.encode(pic);
  mpLoader = new MultipartURLLoader();
  mpLoader.addFile(img_to_post, "photo.png", "photo");
  try {
    mpLoader.addEventListener(Event.COMPLETE, sendPicToServerHandler);
    mpLoader.load(url);
  } catch (e:Error) {
    trace(e);
  }
  }
 
static private function sendPicToServerHandler(ev:Event)
  {
  var answer:String = mpLoader.loader.data;
var data:Object = JSON.decode(answer);
  if (data.error) {
    // ошибка
  }else{
// картинка загружена
    }
  }


Ralph_DiMarko 27.06.2010 01:41

Подскажите почему у меня ничего не заходит в функцию sendPicToServerHandler?
Все нормально именно до этого момента..

RAlfDog 28.06.2010 21:41

Цитата:

Сообщение от Ralph_DiMarko (Сообщение 918314)
Подскажите почему у меня ничего не заходит в функцию sendPicToServerHandler?
Все нормально именно до этого момента..

Код свой приложите, пожалуйста!

Garrat 16.08.2010 18:23

ничего не понимаю...
 
Сделал сперва первым способом, получил такой же ответ (без поля photo).
Переделал, с использованием MultipartURLLoader'а. Тот же результат.
Никак не могу понять, в чем проблема.

P.s. Вроде бы заработало, после долгого копания в моем ByteArray. Похоже, проблема была именно в нем.

O.K. 19.08.2010 14:22

Делал сразу по второму, для загрузки в альбом всё норм - на стену пустое поле photo...

RAlfDog 25.08.2010 02:21

Цитата:

Сообщение от O.K. (Сообщение 929936)
Делал сразу по второму, для загрузки в альбом всё норм - на стену пустое поле photo...

Всё может быть в названии файла и названии поля, делайте, обязательно, вот так:
Код AS3:

mpLoader.addFile(img_to_post, "photo.png", "photo");

т.е. название файла (photo.png) должно соответствовать названию поля (photo)

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


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

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