Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Загрузить файл на сервер ВКонтакте по методу POST
 
 автор: Sturmvogel   (07.09.2011 в 02:24)   письмо автору
 
 

Один из пунктов загрузки гласит:
Приложение формирует POST-запрос на полученный адрес. 
Запрос должен содержать поле photo, которое содержит файл с изображением (JPG, PNG, BMP или GIF). 


Насколько я понял, картинка уже должна быть загружена. Так вот, каким мне способом через AJAX, например, загрузить эту картинку? Потому как адрес сервера выдается нормально, а грузиться туда никак не хочет.

  Ответить  
 
 автор: cheops   (07.09.2011 в 09:58)   письмо автору
 
   для: Sturmvogel   (07.09.2011 в 02:24)
 

Ммм... а здесь помимо JavaScript и сервера в Вконтакте участвует еще какой-то сервер? Дело в том, что JavaScript не может обращаться к файлам на диске пользователя, т.е. файл вы можете загрузить только на сервер и только руками пользователя, далее вы можете дать команду, либо с сервера отправить файл на сервер Вконтакте, либо получить его обратно в JavaScript и попробовать его отправить средствами JavaScript.

  Ответить  
 
 автор: Sturmvogel   (07.09.2011 в 11:40)   письмо автору
 
   для: cheops   (07.09.2011 в 09:58)
 

Я так понимаю, нужно написать AJAX-запрос, обращаясь к своему серверу, чтобы он перекинул файл на сервер Контакта.

Я нашел пару примеров с помощью сокетов, но они не работают. Возможности работать с curl нету

  Ответить  
 
 автор: Sturmvogel   (07.09.2011 в 13:10)   письмо автору
 
   для: 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);
            });
        
            
        });

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования