Загрузка фото в альбом JS

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

Загрузка фото в альбом JS

Сообщение wald »

Помогите с загрузкой изображений в альбом через iframe приложение.
Все делаю как в инструкции:
1. Создал форму для отправки файла

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

<form enctype="multipart/form-data" method="post" actions="" target="test_frame" id="upload_photo">                <input type="file" name="file1">                <input type="submit"></form><iframe name="test_frame"></iframe> 
2. После нажатия кнопки отправить получаю адрес сервера с помощью вызова метода photos.getUploadServer
Уставаливаю атрибут actions для формы upload_url и отправляю форму.
В iframe с именем test_frame должен получить ответ от сервера после загрузки файла, но получаю дубликат своего приложения.
При переходе по адресу получаемому методом photos.getUploadServer в браузере виден завертный json.

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

 var p = true;$('#upload_photo').submit(function (){      if (p) return true;      VK.api('photos.getUploadServer',{"test_mode":1,"aid":id}, function(data){                if (data.error) {                     showError(data);                 }                 if (data.response) {                       $('#upload_photo').attr('actions',data.response.upload_url);                       p = true;                        $('#upload_photo').submit();                   }      });       return false;});
Кто делал загрузку фотографий с помощью стандартных средств html, javascript помогите разобраться.
Или загрузка возможно только через Flash?
mihvotak
Сообщения: 1
Зарегистрирован: 20 апр 2011, 09:11

Re: Загрузка фото в альбом JS

Сообщение mihvotak »

Из своей html страницы не получится считать json пришедший с другого домена, я тож пробовал. Вместо тела iframe с ответом ВК получаешь тело основного iframe.
Не знаю получится ли из flash напрямую на ВК загрузить (политика безопасности мешает), а мы проблему решили через простенький php-скрипт, на который flash шлёт запрос c картинкой, а тот направляет его на вконтакт и возвращает ответ. Поскольку скрипт наш, то не возникает проблем с политикой безопасности (домен совпадает).
Ronaldo
Сообщения: 9
Зарегистрирован: 28 апр 2011, 19:17

Re: Загрузка фото в альбом JS

Сообщение Ronaldo »

Объясните, дайте пример, ссылку, ткните носом :) как загрузить файл на сервер Вконтакте с помощью iframe , мой файл это картинка с известным адресом (на сервере где и iframe приложние) вот, как её передать POST запросом с помощью JS.
Из этих пунктов
Загрузка фотографий на сервер ВКонтакте от имени пользователя осуществляется приложением в 3 этапа:

1. С помощью метода photos.getUploadServer приложение узнает http-адрес для загрузки фотографий в зависимости от альбома, в который их необходимо загрузить.

2. Приложение формирует POST-запрос на полученный адрес.
Запрос должен содержать поля file1-file5, которые содержат файлы с изображениями (JPG, PNG, BMP или GIF).

В ответ приложение получает следующие данные в формате JSON:

{"server": '1', "photos_list": '2,3,4', "aid": '5', "hash": '12345abcde'}


3. С помощью метода photos.save приложение передает серверу полученные данные (server, photos_list, aid и hash) и получает данные о загруженных изображениях.

Фотографии загружены.
Не понятен пункт 2
У меня получается получить адрес для загрузки фотографий.
Почему то скрипт который находиться выше у меня вообще не работает, но я понял как можно отправлять пост запросы я это делаю с помощью этого
скрипта, но как можно им отправлять не просто текстовые значения а файл адресс которого я знаю он на сервере я не понял

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

function post_to_url(path, params, method) {    method = method || "post"; // Set method to post by default, if not specified.     // The rest of this code assumes you are not using a library.    // It can be made less wordy if you use one.    var form = document.createElement("form");    form.setAttribute("method", method);    form.setAttribute("action", path);     for(var key in params) {        var hiddenField = document.createElement("input");        hiddenField.setAttribute("type", "hidden");        hiddenField.setAttribute("name", key);        hiddenField.setAttribute("value", params[key]);         form.appendChild(hiddenField);    }     document.body.appendChild(form);    // Not entirely sure if this is necessary    form.submit();}
И ещё если этот вопрос решается только через флеш, можете подробнее обяснить или же пример выложить.
И ещё почему нет этих примеров сразу в документации Вконтакте (у них что времени не было)?
wald
Сообщения: 3
Зарегистрирован: 19 апр 2011, 12:51

Re: Загрузка фото в альбом JS

Сообщение wald »

Основная проблема заключается в том, что политика безопасности браузеров не позволяет отправить форму стороннему серверу и получить от него ответ. Соответственно на 2 этапе не будут получены данные о заргуженных изображениях и вызвать метод photos.save дальше уже не получится. Во влеш как я понял из примеров размещенных здесь, такого ограничения нет, может ошибаюсь.
Для загрузки изображения нужно отправлять сам файл, а адрес здесь совсем не причем.
Тоесть если хотите загрузить файл со своего сервера, нужно получить адрес сервера загрузки, с чем проблем не возникает, потом через ajax или iframe как более привычно, вызвать скрипт на своем сервере, который уже отправит файл с картинкой на сервер вконтакте(полезна библиотека curl) и передаст в ответ JSON ответ от контакта, а потом уже вызываете метод photos.save для сохранения загруженных изображений. Для пользовательского изображение все тоже самое, только файл с изображением с помощью формы отправляете на свой сервер, а потом уже php скриптом на сервер вконтакте.
Ronaldo
Сообщения: 9
Зарегистрирован: 28 апр 2011, 19:17

Re: Загрузка фото в альбом JS

Сообщение Ronaldo »

Спасибо за ответ wald.
Благодаря этой теме мне удалось то что я хотел http://flapps.ru/forum/topic1564.html. Полное решение там есть.
Я счастлив! :D Ура! Блин какой же я тупой :)
Ответить