Загрузка фотографий на сервер вконтакте

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в IFrame-приложениях (JavaScript, PHP и т.д)
whitenigger
Сообщения: 5
Зарегистрирован: 14 май 2011, 04:41

Загрузка фотографий на сервер вконтакте

Сообщение whitenigger »

Почитал документацию вконтакте, но к сожалению там все очень скудно и для начинающего совсем ни чего не понятно.
К сожалению с JavaScript до этого вообще не работал, но встала задача реализовать вот такое приложение:
Пользователь через форму загружает фотографию и в базу MySQL должен записаться ее адрес. Если хранить фотографии на своем сервере то проблем с этим ни каких на php все реализовал. Но нужно хранить именно на сервере вконтакте. Почитал про photos.getUploadServer но не могу понять как узнать ID альбома, в который необходимо загрузить фотографии. Или этот альбом надо вначале создать?
Помогите как говориться хорошим советом, ну или исходник какой нить поковырять киданите. Буду очень благодарен.
whitenigger
Сообщения: 5
Зарегистрирован: 14 май 2011, 04:41

Re: Загрузка фотографий на сервер вконтакте

Сообщение whitenigger »

После прочтения всей информации накидал вот такой скрипт:

Код: Выделить всё

<script type="text/javascript">  VK.init(function() {     VK.api('wall.getPhotoUploadServer', {}, function (data) {        if (data.response) {            $.post(                // отправляю со своего сервера изображение на upload_url                'http://test.ru/demo_vk/1305295000_demotiv.jpg',                {upload_url:data.response.upload_url},                function (json) {                     VK.api('wall.savePost',                            {wall_id: uid, message: message, server: json.server, photo: json.photo, hash:json.hash, post_id:123},                            function(data) {                                if (data.response) {                                          VK.callMethod("saveWallPost", data.response.post_hash);                                                                  console.log(data);                                }                            }                        );                }, 'json');        }    });    });    </script>
Но вот не пойму в чем ошибка ибо не работает...
whitenigger
Сообщения: 5
Зарегистрирован: 14 май 2011, 04:41

Re: Загрузка фотографий на сервер вконтакте

Сообщение whitenigger »

Короче сам разобрался :D Выкладываю исходник может кому и пригодиться..

Код: Выделить всё

 <script type="text/javascript">  VK.init(function() {     VK.api('wall.getPhotoUploadServer', {}, function (data) {        if (data.response) {            $.post(                // отправляю со своего сервера изображение на upload_url                // необходимо создать на сервере файл uploadimage.php код для этого фойла см. ниже                'http://test.ru/uploadimage.php',                {upload_url:data.response.upload_url},                function (json) {                       VK.api("wall.savePost", { wall_id: "<Ваше ID>", server: json.server, photo:json.photo, hash: json.hash, post_id:"123", photo_id:data.id , message: '<текст для вывода на стену>' }, function(data)    {          VK.callMethod("saveWallPost", data.response.post_hash);      });                }, 'json');        }    });    });</script> 
Файл uploadimage.php должен лежать в папке с фотографией

Код: Выделить всё

     <?php         if (isset($_POST["upload_url"])) {        $upload_url = $_POST["upload_url"];               $post_params['photo'] = '@'.'1305295000_demotiv.jpg'; ///ну тут понятно что это ваша фотка             $ch = curl_init();        curl_setopt($ch, CURLOPT_URL, $upload_url);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);        curl_setopt($ch, CURLOPT_POST, true);        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params);        $result = curl_exec($ch);        curl_close($ch);               //var_dump($result);        $result = json_decode($result);               $mess = array (server => $result->server, photo=> $result->photo, hash => $result->hash);               echo json_encode($mess);           }    ?> 
Собрал все это в кучу изучая данный форум! Так что выражаю благодарность всем тем людям которые давали ответы и выкладывали куски своих скриптов!

Но все таки остался вопрос.. Я так понимаю что для отображения большой фотографии при клике по записе на стене. Нужен Flash контейнер для Iframe приложений... Подскажите как его реализовать или где подробно об этом почитать. Ибо с Flash до сегодняшнего дня вообще не работал.
13hakta
Сообщения: 1
Зарегистрирован: 30 сен 2011, 20:11

Re: Загрузка фотографий на сервер вконтакте

Сообщение 13hakta »

Моё вложение сообществу. Прокси-скрипт для загрузки фото на вконтакте, облегчая работу через IFrame.
Готов к использованию в приведенном ниже виде. Для его использования направляете на него файлы file1-file5 и параметр upload_url. Далее получаете проксированный ответ от сервера ВК.

Файл uploader.php

Код: Выделить всё

<?php// Vitaly Chekryzhev <13hakta@gmail.com>, 2011// VKontakte photo-upload proxy // Temporary dir for files$uploads_dir = '/tmp'; if (isset($_POST["upload_url"])) { $upload_url = $_POST["upload_url"];  $tmp_files = array();  foreach ($_FILES as $fieldname => $upfile) {  if ($upfile["error"] == UPLOAD_ERR_OK) {   $newname = "$uploads_dir/" . $upfile['name'];   move_uploaded_file($upfile['tmp_name'], $newname);    $post_params[$fieldname] = "@$newname";   $tmp_files[] = $newname;  } }  // Connect to VK through CURL $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $upload_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params); $result = curl_exec($ch); curl_close($ch);  // Decode results $result = json_decode($result);  // Create response $msg = array('aid' => $result->aid, 'server' => $result->server, 'photos_list' => $result->photos_list, 'hash' => $result->hash); echo json_encode($msg);  // Cleanup foreach ($tmp_files as $upfile)  unlink($upfile);}?> 
igor_ch
Сообщения: 7
Зарегистрирован: 03 дек 2011, 22:29

Re: Загрузка фотографий на сервер вконтакте

Сообщение igor_ch »

А что делать, если из uploadimage.php приходит следующий json-ответ:

Код: Выделить всё

 {"server":null,"photo":null,"hash":null} 
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Загрузка фотографий на сервер вконтакте

Сообщение Александр »

igor_ch
При запросе с сервера верно передаешь все параметры?
Аватара пользователя
boombast1k
Сообщения: 332
Зарегистрирован: 23 июн 2011, 07:31

Re: Загрузка фотографий на сервер вконтакте

Сообщение boombast1k »

whitenigger писал(а):Короче сам разобрался :D Выкладываю исходник может кому и пригодиться..

Код: Выделить всё

 <script type="text/javascript">  VK.init(function() {     VK.api('wall.getPhotoUploadServer', {}, function (data) {        if (data.response) {            $.post(                // отправляю со своего сервера изображение на upload_url                // необходимо создать на сервере файл uploadimage.php код для этого фойла см. ниже                'http://test.ru/uploadimage.php',                {upload_url:data.response.upload_url},                function (json) {                       VK.api("wall.savePost", { wall_id: "<Ваше ID>", server: json.server, photo:json.photo, hash: json.hash, post_id:"123", photo_id:data.id , message: '<текст для вывода на стену>' }, function(data)    {          VK.callMethod("saveWallPost", data.response.post_hash);      });                }, 'json');        }    });    });</script> 
Файл uploadimage.php должен лежать в папке с фотографией

Код: Выделить всё

     <?php         if (isset($_POST["upload_url"])) {        $upload_url = $_POST["upload_url"];               $post_params['photo'] = '@'.'1305295000_demotiv.jpg'; ///ну тут понятно что это ваша фотка             $ch = curl_init();        curl_setopt($ch, CURLOPT_URL, $upload_url);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);        curl_setopt($ch, CURLOPT_POST, true);        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params);        $result = curl_exec($ch);        curl_close($ch);               //var_dump($result);        $result = json_decode($result);               $mess = array (server => $result->server, photo=> $result->photo, hash => $result->hash);               echo json_encode($mess);           }    ?> 
Собрал все это в кучу изучая данный форум! Так что выражаю благодарность всем тем людям которые давали ответы и выкладывали куски своих скриптов!

Но все таки остался вопрос.. Я так понимаю что для отображения большой фотографии при клике по записе на стене. Нужен Flash контейнер для Iframe приложений... Подскажите как его реализовать или где подробно об этом почитать. Ибо с Flash до сегодняшнего дня вообще не работал.


я создал 2 таких скрипта,открываю первый в приложении,но ничего не происходит вообще:(. скрипт не изменял,за исключением своих данных!
может кнопку какую то нужно поместить?


Код: Выделить всё

$post_params['photo'] = '@'.'1305295000_demotiv.jpg'; ///ну тут понятно что это ваша фотка
что вот тут обозначает @?
igor_ch
Сообщения: 7
Зарегистрирован: 03 дек 2011, 22:29

Re: Загрузка фотографий на сервер вконтакте

Сообщение igor_ch »

Все сделано по примеру. Ничего не менял, за исключением установки имени файла фотки.
Возникает такое ощущение, что curl не получает правильно ответа, поскольку, если полученный адрес сервера ввести в адресной строке браузера, то возвращается и server и hash.
Аватара пользователя
boombast1k
Сообщения: 332
Зарегистрирован: 23 июн 2011, 07:31

Re: Загрузка фотографий на сервер вконтакте

Сообщение boombast1k »

igor_ch может тебе еще надо id свой поставить? или ты так и сделал?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Загрузка фотографий на сервер вконтакте

Сообщение Александр »

boombast1k писал(а):что вот тут обозначает @?
CURLOPT_POSTFIELDS
The full data to post in a HTTP "POST" operation. To post a file, prepend a filename with @ and use the full path.
http://php.net/manual/en/function.curl-setopt.php
Ответить