Задать вопрос

Как правильно загружать изображения через API ВКонтакте?

Здравствуйте. Помогите пожалуйста со следующей проблемой. Требуется загрузить фотографию в альбом группы через API VK. Я дошел до пункта получения URL для загрузки фото, а дальше я делаю следующее:
//Получили URL для загрузки
$uploadUrl = $result->response->upload_url;
//Путь до картинки. Тут у меня еще есть вопрос, а можно ли использовать пути типа http://example.com/test/image.jpg ? Хотя это не важно на данный момент
$file_path = "images/2.jpg";
$postParam = array("file1"=> "@".$file_path);
$ch = curl_init($uploadUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postParam);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data; charset=UTF-8'));
$json = json_decode(curl_exec($ch));
curl_close($ch);

В результате я получаю следующий ответ:
stdClass Object
(
    [server] => 630830
    [photos_list] => []
    [aid] => 234908050
    [hash] => a14bbef18e6d15798955f9a4ba59a77e
    [gid] => 126877620
)

Подскажите пожалуйста, где и что я делаю не так, что поле Photos_list возвращается пустое?
Заранее благодарен всем отозвавшимся.
  • Вопрос задан
  • 1222 просмотра
Подписаться 5 Оценить Комментировать
Решения вопроса 1
@EvgMul Автор вопроса
С горем пополам разобрался в чем была проблема.
Дело в том, что использование curl_setopt ( $ch, CURLOPT_POSTFIELDS, array( 'file1' => '@' . $file ) );
начиная с версии 5.5. нежелательно. На моем сервере стоит 5.6.
Вместо это строчки следует использовать
curl_setopt($ch, CURLOPT_POSTFIELDS, ['file1' => new CurlFile($file_path)]);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега PHP
Добрый день.
Для начала проверьте следующий код.
$file_path = "images/2.jpg";
$postParam = array("file1"=> "@".$file_path);

Если вывести в барузер
echo "<img src='".$file_path."' alt='' />";
то получите Вы изображение или нет?
Возможно проблема в пути к файлу.

p.s. Это, думаю, лишнее.

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data; charset=UTF-8'));
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы