|
|
|
| Один из пунктов загрузки гласит:
Приложение формирует POST-запрос на полученный адрес.
Запрос должен содержать поле photo, которое содержит файл с изображением (JPG, PNG, BMP или GIF).
|
Насколько я понял, картинка уже должна быть загружена. Так вот, каким мне способом через AJAX, например, загрузить эту картинку? Потому как адрес сервера выдается нормально, а грузиться туда никак не хочет. | |
|
|
|
|
|
|
|
для: Sturmvogel
(07.09.2011 в 02:24)
| | Ммм... а здесь помимо JavaScript и сервера в Вконтакте участвует еще какой-то сервер? Дело в том, что JavaScript не может обращаться к файлам на диске пользователя, т.е. файл вы можете загрузить только на сервер и только руками пользователя, далее вы можете дать команду, либо с сервера отправить файл на сервер Вконтакте, либо получить его обратно в JavaScript и попробовать его отправить средствами JavaScript. | |
|
|
|
|
|
|
|
для: cheops
(07.09.2011 в 09:58)
| | Я так понимаю, нужно написать AJAX-запрос, обращаясь к своему серверу, чтобы он перекинул файл на сервер Контакта.
Я нашел пару примеров с помощью сокетов, но они не работают. Возможности работать с curl нету | |
|
|
|
|
|
|
|
для: cheops
(07.09.2011 в 09:58)
| | Я пишу вот такой код загрузки:
if (isset($_POST['vkServer']))
{
$vkServer = $_POST['vkServer'];
$query = explode('/', $vkServer);
$hostname = $query[2];
$path = $query[3];
// Устанавливаем соединение с сервером $hostname
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
// Проверяем успешность установки соединения
if (!$fp) die($errstr.' ('.$errno.')');
// Содержимое файла
$file = '1.png';
$f = fopen($file, 'r');
$content = fread($f, filesize($file));
fclose($f);
// Данные HTTP-запроса
$data = 'photo='.$content;
// Заголовок HTTP-запроса
$headers = 'POST '.$path." HTTP/1.1\r\n";
$headers .= 'Host: www.'.$hostname."\r\n";
$headers .= "Content-type: image/png\r\n";
$headers .= 'Content-Length: '.strlen($data)."\r\n\r\n";
// Отправляем HTTP-запрос серверу second.com
fwrite($fp, $headers.$data);
// Получаем ответ
$result = '';
while ( !feof($fp) ) $result .= fgets($fp, 1024);
// Закрываем соединение
fclose($fp);
echo $result;
|
Возвращается ошибка 400 о плохом запросе.
Заголовки получаются такими:
POST upload.php?act=do_add_posted&mid=133230885&hash=a705adb2e1425df45af0bbdf012daf18&rhash=c07b23186fca031b5b6eef24122b6dde&swfupload=1 HTTP/1.1
Host: www.cs888.vkontakte.ru
Content-type: image/png
Content-Length: 6731
|
В документации сказано по этому пункту:
Приложение формирует POST-запрос на полученный адрес.
Запрос должен содержать поле photo, которое содержит файл с изображением (JPG, PNG, BMP или GIF).
|
Ну и JS пока такой, если будет полезно:
VK.api("wall.getPhotoUploadServer", function(data) {
// Получаем адрес сервера, куда посылать картинку:
server = data.response.upload_url;
// Отправляем POST-запрос на добавление:
$.post("/ajax/upload", {vkServer: server}, function(json) {
alert(json);
});
});
|
| |
|
|
|