Форум 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=172598)

Light 13.12.2011 17:36

Вопрос про отправку картинки на стену
 
Задача - отправить картинку, генерируемую в приложении на стену.

Опишу по порядку, что делаю.

Сначала получаю адрес для загрузки картинки с помощью wall.getPhotoUploadServer. С этим проблем не возникает.

Затем кодирую картинку в ЖПГ и отправляю ее по полученному адресу с помощью MultipartURLLoader вот так:

Код AS3:

byteArray = new ByteArray();
            var encoder:JPGEncoder = new JPGEncoder(100);
            byteArray = encoder.encode(myBitmapData);
 
            mll = new MultipartURLLoader();
            mll.addEventListener(Event.COMPLETE, onMLLUploadComplete);
            mll.addFile(byteArray, "file.jpg", "file1", 'image/jpeg');
            mll.load(vKPhotoServer);

В ответе получаю следующее:

{"mid": "1234516326", "gid": "0", "server": "302401", "photo": "", "hash": "edf6w39ffdd5tt8050b2sdf23f334y6"}

Как видите, поле photo пустое. И из-за этого на следующих этапах возникает ошибка. Кто-нибудь может сказать что я делаю не так? В другом приложении, при замене аватарки я загружаю изображение точно таким же способом и поле photo не пустое приходит и все отлично работает. А тут вот ошибка почему-то...

mikhailk 14.12.2011 14:29

Код AS3:

mll.addFile(byteArray, "file.jpg", "photo", 'image/jpeg');


ЗлОй ПрОграММер 15.12.2011 12:31

возможен и такой вариант если вы отправляете картинку без активного действия, т.е. перед отправкой пользователь обязательно должен нажать на кнопку отправки или просто щёлкнуть левой кнопкой мышки,
если этого вы не делали то придёт такой ответ.
Код AS3:

{"mid": "1234516326", "gid": "0", "server": "302401", "photo": "", "hash": "edf6w39ffdd5tt8050b2sdf23f334y6"}

попробуйте сделать событие MOUSE_DOWN и в его обработчике пишите mll.load(vKPhotoServer);
а на стену можно и с полем file1 загружать

Light 16.12.2011 08:09

mikhailk, не сработало. Все то же самое.

ЗлОй ПрОграММер, у меня в этом смысле все нормально - загружается от действия пользователя, а не просто так.

Блин, что же я не так делаю? тут ведь наверняка полно людей, которые реализовали загрузку фоток на стены. Поделитесь может примерами кода???

ЗлОй ПрОграММер 16.12.2011 11:08

понял в чём у вас дело )
метод называется photos.getWallUploadServer, а не wall.getPhotoUploadServer
http://vk.com/developers.php?oid=-1&...llUploadServer

только вот не пойму в чём разница между ними, но в своём проекте я использую photos.getWallUploadServer

mikhailk 17.12.2011 01:12

Цитата:

Поделитесь может примерами кода???
У меня в старых проектах, пока подключался как flash-приложения, был вот такой код и он работает в них до сих пор:

Код AS3:

var fileContentType:String = 'image/jpeg';
var mpLoader:MultipartURLLoader = new MultipartURLLoader();
mpLoader.addEventListener(Event.COMPLETE, imageForWallUploaded);       
mpLoader.addFile(byteArray, "image.jpg", "photo", fileContentType);
mpLoader.load(saverUrl);

Тут я в упор не вижу разницы, честно говоря.

А вот байтовый массив - точно создается?

ЗЫ. Адрес для загрузки - да, через getPhotoUploadServer.

bumblebee 13.01.2012 15:33

Всем привет!

Тоже возникли затруднения с загрузкой картинки на сервер Вконтакте.
Делал все согласно документации: Загрузка фотографий на стену пользователя
Итак, рисую картинку, и пытаюсь ее сохранить на сервере.
Приведу код:
Код AS3:

// Сервер для загрузки картинок
        private function photosGetUploadServer():void {
                VK.api("photos.getWallUploadServer", {}, onCompleteServer, WallWallError);
        }
 
 
// Если все норм, делаем скриншот и загружаем на сервер
private function onCompleteServer(response:Object):void
                {
                        log("onCompleteServer.response : " + response.upload_url);
                        // Здесь формируем картинку
                        var OutBitmap:BitmapData = new BitmapData(screen.width, screen.height);
                                OutBitmap.draw(screen);
 
                        var data:ByteArray = PNGEncoder.encode(OutBitmap);
 
                        mpLoader = new MultipartURLLoader();
                        mpLoader.addFile(data, "photo.jpg", "photo", 'image/jpeg');
                        mpLoader.addEventListener(Event.COMPLETE, WallSavePhotoPost);
                        mpLoader.load(response.upload_url)//загружаем по пришедшему адресу
                }
 
// После успешной загрузки, сохраняем картинку - photos.saveWallPhoto
private function WallSavePhotoPost(e:Event):void
                {
                        var answer:String = mpLoader.loader.data;
                        serverAswer = answer;
                        log("WallSavePhotoPost.answer : " + answer);
                        var data:Object = new JSONDecoder(answer).getValue();
 
                        VK.api("photos.saveWallPhoto", { server: data.server, photo:data.photo, hash: data.hash }, WallSaveAppPost, WallWallError);
                }
 
//  Получаем ответ о загруженной картинке
private function WallSaveAppPost(_data:Object):void
                {
                          log("WallSaveAppPost.answer : " + _data);
                          /* Output
<?xml version="1.0" encoding="utf-8"?>
<response list="true">
 <photo>
  <id>photo75313495_275300989</id>
  <pid>275300989</pid>
  <aid>-14</aid>
  <owner_id>75313495</owner_id>
  <src>http://cs9774.vkontakte.ru/u75313495/-14/m_43f6b49d.jpg</src>
  <src_big>http://cs9774.vkontakte.ru/u75313495/-14/x_60fab07d.jpg</src_big>
  <src_small>http://cs9774.vkontakte.ru/u75313495/-14/s_9558c789.jpg</src_small>
  <created>1326448994</created>
 </photo>
</response>
*/

                          // Здесь можно использовать либо команду wall.post или wall.savePost
                }

В функции я описал что приходит в ответе Output.
1) Самое интересное, если я пишу в строке браузера http://vkontakte.ru/[id - пришедший] (Пример: http://vkontakte.ru/photo75313495_275300201], то картинка в браузере не отображется и пишет ошибка. Так непонятно ПОЧЕМУ?
Если же в браузере вставить ссылку которая пришла в ТЭГе <src_big> - то она показывается

2) Если же использовать команду wall.savePost
Код AS3:

/*
Этот код чуть ниже в функции WallSaveAppPost
*/

 
// serverAswer  - это ответ полученный на запрос загрузки картинки на сервер вКонтакте
var data:Object = new JSONDecoder(serverAswer).getValue();
 
VK.api('wall.savePost', { wall_id: viewer_id, server: data.server, photo: data.photo, hash: data.hash,
                                        message: "Смотри, какая красивая картинка." },
                                        WallPosted, WallWallError);
/* Output
<?xml version="1.0" encoding="utf-8"?>
<error>
 <error_code>121</error_code>
 <error_msg>Invalid hash</error_msg>
...
*/

viewer_id - id пользователя просматривающего приложение

Непонятно почему приходит Invalid hash - потому что этот параметр возвращается всего один раз


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

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