Загрузка файлов

Возможность поделиться с друзьями своей фотографией, прикрепить документ или понравившийся видеоклип очень важна для многих пользователей. Реализовав эту функциональность, вы сделаете свое приложение более привлекательным и востребованным.

Процесс загрузки любого файла состоит из трех стандартных этапов:

  1. 1.

    Получение адреса для загрузки.

  2. 2.

    Передача содержимого файлов на полученный адрес в формате multipart/form-data.

  3. 3.

    Сохранение информации о загруженном файле.

Детали процесса загрузки (например, название поля с файлом в POST-запросе) могут различаться в зависимости от типа файла. Ниже представлено подробное руководство для всех типов медиаконтента.

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

Допустимые форматы: JPG, PNG, GIF.

Ограничения: не более 5 фотографий за один раз, сумма высоты и ширины не более 14000px, файл объемом не более 50 МБайт, соотношение сторон не менее 1:20.

Поле POST-запроса: file{i}, i=[1..5].

Получение адреса

Вызовите метод photos.getUploadServer, чтобы получить адрес для загрузки фото. Для загрузки фотографии в сообщество необходимо передать идентификатор сообщества в параметре group_id.

Передача файла

Передайте файлы на адрес upload_url, полученный в предыдущем пункте, сформировав POST-запрос с полями file1-file5. Эти поля должны содержать изображения в формате multipart/form-data.

После успешной загрузки сервер возвращает в ответе JSON-объект с полями server, photos_list, hash, aid:

JSON{ "server":123456, "photos_list":"[{\"photo\":\"e9f2eba71b:y\",\"sizes\":[[\"s\",\"123456852\",\"e65f\",\"Br4ir9YAvO8\",75,41],[\"m\",\"123456852\",\"e660\",\"Lqpe1N8s8zY\",130,71],[\"x\",\"123456852\",\"e661\",\"tRFbnaIP_4c\",604,330],[\"y\",\"123456852\",\"e662\",\"8JhBOy0qR6o\",748,409],\"kid\":\"569c3da3b168b347315aa5adc92a953a\",\"debug\":\"xsymyxyyyoypyqyry\"}]", "aid":98754321, "hash":"22b333dbbef7cd9b1f9829b5f8713f86" }

Поля server и aid содержат числовые значения, в hash возвращается строка, а в поле photos_list находится строка с JSON-объектом, структуру которого важно сохранить в исходном виде. В PHP вы можете использовать json_decode() для всего ответа.

Сохранение результата

Чтобы сохранить фотографии в альбоме, вызовите метод photos.save с параметрами server, photos_list, aid, hash, полученными на предыдущем этапе.

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

Допустимые форматы: JPG, PNG, GIF.

Ограничения: не более 6 фотографий за один раз в методе photos.saveWallPhoto, сумма высоты и ширины не более 14000px, файл объемом не более 50 МБайт, соотношение сторон не менее 1:20.

Поле POST-запроса: photo.

Получение адреса

Вызовите метод photos.getWallUploadServer, чтобы получить адрес для загрузки фото. Для загрузки фотографии в сообщество необходимо передать идентификатор сообщества в параметре group_id.

Передача файла

Передайте файл на адрес upload_url, полученный в предыдущем пункте, сформировав POST-запрос с полем photo. Это поле должно содержать изображение в формате multipart/form-data.

После успешной загрузки сервер возвращает в ответе JSON-объект с полями server, photo, hash:

JSON{ "server": 123456, "photo": "[{\"photo\":\"26f1e24c4c:w\",\"sizes\":[[\"s\",\"123456852\",\"15e88\",\"01qMnm6kJ-U\",56,75],[\"m\",\"123456852\",\"15e89\",\"Y9BJ8lGrL_0\",97,130],[\"x\",\"123456852\",\"15e8a\",\"wVmxGPX0i88\",453,604],[\"y\",\"123456852\",\"15e8b\",\"ZGgaSculk1E\",605,807],[\"z\",\"123456852\",\"15e8c\",\"yl_hClRMfG8\",810,1080],\"kid\":\"95574768563a263c4a275f4af50a9425\",\"debug\":\"xswmwxwywzwwwowpwqwrw\"}]", "hash": "ed06bb07ef7a128fdae22decad8291f7" }

Поле server содержит числовое значение, в hash возвращается строка, а в поле photo находится JSON-объект, структуру которого важно сохранить в исходном виде. В PHP вы можете использовать json_decode() для всего ответа.

Сохранение результата

Чтобы сохранить фотографию, вызовите метод photos.saveWallPhoto с параметрами server, photo, hash, полученными на предыдущем этапе.

Публикация фотографии

После успешной загрузки фотографии вы можете разместить её на стене, опубликовав запись с помощью метода wall.post и указав идентификатор фотографии в формате "photo" + {owner_id} + "_" + {photo_id} (например, photo12345_654321) в параметре attachments. В {owner_id} необходимо указывать то же значение, которое пришло Вам в ответе от метода photos.saveWallPhoto.

Загрузка главной фотографии пользователя или сообщества

Допустимые форматы: JPG, PNG, GIF.

Ограничения: размер не менее 200px x 200px, соотношение сторон от 0.25 до 3, сумма высоты и ширины не более 14000px, файл объемом не более 50 МБайт, соотношение сторон не менее 1:20.

Поле POST-запроса: photo.

Получение адреса

Вызовите метод , чтобы получить адрес для загрузки фото. Для загрузки главной фотографии сообщества необходимо передать его идентификатор со знаком «минус» в параметре owner_id.

Передача файла

Передайте файл на адрес upload_url, полученный в предыдущем пункте, сформировав POST-запрос с полем photo. Это поле должно содержать изображение в формате multipart/form-data.

Дополнительно вы можете передать параметр _square_crop в формате x,y,w, где x и y — координаты верхнего правого угла миниатюры, а w — сторона квадрата. Тогда для фотографии также будет подготовлена квадратная миниатюра.

После успешной загрузки сервер возвращает в ответе JSON-объект с полями server, photo, mid, hash, message_code, profile_aid:

JSON{ "server": 999, "photo": "eyJvaWQiOjIzMTQ4NTIsInBob3RvIjp7InBob3RvIjoiZmEyZjViNmMzYjp3Iiwic2l6ZXMiOltbInMiLCI2MjY2Mjc4NTGRkMThjYTY2NjZmMjI3NTRkODAxNDUyNDUzOSJ9", "mid": 2314852, "hash": "7448f93f405dfd5c444f5d4aabb84942", "message_code": 2, "profile_aid": -6 }

Поля server, mid, message_code, profile_aid содержат числовые значения, а в полях hash и photo возвращаются строки.

Сохранение результата

Чтобы сохранить фотографию, вызовите метод с параметрами server, photo, hash, полученными на предыдущем этапе.

В iFrame-приложении действуйте следующим образом:

  • С помощью Javascript SDK вызовите метод photos.saveOwnerPhoto с параметрами server, photo и hash. В приложении откроется окно предупреждения для сохранения новой фотографии. Если пользователь соглашается, то фотография успешно сохраняется и возвращается параметр photo_src. При этом выполнять следующий пункт не нужно.

Если вы вызываете через прямое обращение к API, то Вам необходимо дополнительно выполнить следующий пункт.

Вызовите метод Client API showProfilePhotoBox с параметром photo_hash. В приложении будет отображено окно для подтверждения изменения фотографии.

Загрузка фотографии в личное сообщение

Допустимые форматы: JPG, PNG, GIF.

Ограничения: сумма высоты и ширины не более 14000px, файл объемом не более 50 МБайт, соотношение сторон не менее 1:20.

Поле POST-запроса: photo.

Получение адреса

Вызовите метод photos.getMessagesUploadServer, чтобы получить адрес для загрузки фото.

Передача файла

Передайте файл на адрес upload_url, полученный в предыдущем пункте, сформировав POST-запрос с полем photo. Это поле должно содержать изображение в формате multipart/form-data.

После успешной загрузки сервер возвращает в ответе JSON-объект с полями server, photo, hash:

JSON{ "server": 626627, "photo": "[{\"photo\":\"190ab6eadf:w\",\"sizes\":[[\"s\",\"626627852\",\"e6a3\",\"lMU557Tx-78\",75,56],[\"m\",\"626627852\",\"e6a4\",\"hq8g5CzPmXs\",130,97],[\"x\",\"626627852\",\"e6a5\",\"c-_TPYB_rIU\",604,453],\"kid\":\"72cfb87071e2d6624a38167524d5b4aa\",\"debug\":\"xswmwxwywzwwwowpwqwrw\"}]", "hash": "581d7a4ffc81e2bfe90016d8b35c288d" }

Поле server содержит числовое значение, в hash возвращается строка, а в поле photo находится JSON-объект, структуру которого важно сохранить в исходном виде. В PHP вы можете использовать json_decode() для всего ответа.

Сохранение результата

Чтобы сохранить фотографию, вызовите метод photos.saveMessagesPhoto с параметрами server, photo, hash, полученными на предыдущем этапе.

После успешной загрузки фотографии вы можете прикрепить ее к личному сообщению, используя метод messages.send и указав данные фотографии в параметре attachment.

Загрузка главной фотографии для чата

Допустимые форматы: JPG, PNG, GIF.

Ограничения: минимальный размер фото — 200px x 200px, сумма высоты и ширины не более 14000px, файл объемом не более 50 МБайт, соотношение сторон не менее 1:20.

Поле POST-запроса: file.

Получение адреса

Вызовите метод , чтобы получить адрес для загрузки фото.

Передача файла

Передайте файл на адрес upload_url, полученный в предыдущем пункте, сформировав POST-запрос с полем file. Это поле должно содержать изображение в формате multipart/form-data.

После успешной загрузки сервер возвращает в ответе JSON-объект с полем response:

JSON{ "response": "eyJvaWQiOjIwMDAwMDAyMDUsInBob3RvIjp7InBob3RvIjoiZTNlMTM1ZDBjNDp4Iiwic2l6ZXMiOltbInMiLCI2MzM3cGZ3Iiw3NSw1M10sWyJtIiwiNjMzNzI1ODUyIiwzMzcyNSwibWlkIjoyMzE0ODUyLCJfc2lnIjoiNmU2YjdhZGU1MDkwYTM5NDg5ZGU0ZmM1Yjg0YTU3YmQifQ" }

Поле response содержит строку.

Сохранение результата

Чтобы сохранить фотографию, вызовите метод messages.setChatPhoto, передав в параметре file содержимое поля response, полученного на предыдущем этапе.

Загрузка фотографии для товара

Допустимые форматы: JPG, PNG, GIF.

Ограничения: минимальный размер фото — 400px x 400px, сумма высоты и ширины не более 14000px, файл объемом не более 50 МБайт, соотношение сторон не менее 1:20.

Поле POST-запроса: file.

Получение адреса

Вызовите метод , чтобы получить адрес для загрузки фото. Если вы хотите загрузить основную фотографию товара, необходимо передать параметр main_photo = 1.

Передача файла

Передайте файл на адрес upload_url, полученный в предыдущем пункте, сформировав POST-запрос с полем file. Это поле должно содержать изображение в формате multipart/form-data.

После успешной загрузки сервер возвращает в ответе JSON-объект с полями server, photo, hash, crop_data, crop_hash:

JSON{ "server": 625831, "photo": "[[{\"photo\":\"8d81799f90:w\",\"sizes\":[[\"s\",\"625831075\",\"45839\",\"-5fbUeQq1YY\",75,56]],[[\"m\",\"625831075\",\"4583a\",\"G8yAYbsk7M4\",130,97]]]}]", "hash": "8954a4da5ba06d4e", "crop_data": "oAAmMpwAAAAAlTWyjA", "crop_hash": "729155760247b391134" }

Для дополнительной фотографии поля crop_data и crop_hash не возвращаются.

Поле server содержит числовое значение, в hash, crop_data и crop_hash возвращаются строки, а в поле photo находится JSON-объект, структуру которого важно сохранить в исходном виде (убрав, однако, экранирование символов перед дальнейшим использованием). В PHP вы можете использовать json_decode() для всего ответа и затем stripslashes() для объекта photo.

Сохранение результата

Чтобы сохранить фотографию, вызовите метод с параметрами server, photo, crop_data, crop_hash, полученными на предыдущем этапе. Если фотография не основная, поля crop_data и crop_hash передавать не нужно.

После успешной загрузки фотографии вы можете прикрепить ее к товару, используя методы market.add или market.edit и указав идентификатор фотографии в параметре main_photo_id или photo_id.

Загрузка фотографии для подборки товаров

Допустимые форматы: JPG, PNG, GIF.

Ограничения: минимальный размер фото — 1280px x 720px, сумма высоты и ширины не более 14000px, файл объемом не более 50 МБайт, соотношение сторон не менее 1:20.

Название поля POST-запроса: file.

Получение адреса

Вызовите метод , чтобы получить адрес для загрузки фото.

Передача файла

Передайте файл на адрес upload_url, полученный в предыдущем пункте, сформировав POST-запрос с полем file. Это поле должно содержать изображение в формате multipart/form-data.

После успешной загрузки сервер возвращает в ответе JSON-объект с полями server, photo, gid, hash:

JSON{ "server": 999, "photo": "eyJwaG90byI6IntcInBob", "gid": 102416739, "hash": "0adc3bd6509fdcf97052b0594c4063ff" }

Поля server и gid содержат числовые значения, а в полях photo и hash возвращаются строки.

Сохранение результата

Чтобы сохранить фотографию, вызовите метод с параметрами server, photo, hash, полученными на предыдущем этапе.

После успешной загрузки фотографии вы можете прикрепить ее к подборке товаров, используя методы market.addAlbum или market.editAlbum и указав идентификатор фотографии в параметре photo_id.

Загрузка аудиозаписей

Допустимые форматы: MP3.

Ограничения: файл объемом не более 200 МБайт.

Поле POST-запроса: file.

Получение адреса

Вызовите метод audio.getUploadServer, чтобы получить адрес для загрузки аудиозаписи.

Передача файла

Передайте файл на адрес upload_url, полученный в предыдущем пункте, сформировав POST-запрос с полем file. Это поле должно содержать mp3-файл в формате multipart/form-data.

После успешной загрузки сервер возвращает в ответе JSON-объект с полями redirect, server, audio, hash:

JSON{ "redirect": "http://vk.com/audio.php?act=done_add&mid=123456&aid=0&gid=0&server=654321&audio=%7B%22audio%22%3A%2215bf8d9772%22%2C%22time%22%3A199%2C%22artist%22%3A%22%22%2C%22title%22%3A%22%22%2C%22genre%22%3A0%2C%22album%22%3A%22%22%2C%22bitrate%22%3A192%2C%22bitrate_mode%22%3A%22cbr%22%2C%22md5%22%3A%22d27787de614807aafe4460818e341dbb%22%2C%22kad%22%3A%2218005ffc2aaab4fbbdd%22%2C%22vkaf_gen_data%22%3A%7B%22key%22%3A%22fp2314852_15bf8d9772%22%2C%22res%22%3A%7B%22result%22%3Atrue%2C%22_%22%3A%22_%22%7D%2C%22err%22%3A%5B%5D%7D%7D&hash=82cc901615b98153398e4c230ef79eaf", "server": 654321, "audio": "%7B%22audio%22%3A%2215bf8d9772%22%2C%22time%22%3A199%2C%22artist%22%3A%22%22%2C%22title%22%3A%22%22%2C%22genre%22%3A0%2C%22album%22%3A%22%22%2C%22bitrate%22%3A192%2C%22bitrate_mode%22%3A%22cbr%22%2C%22md5%22%3A%22d27787de614807aafe4460818e341dbb%22%2C%22kad%22%3A%2218005ffc2aaab4fbbdd%22%2C%22vkaf_gen_data%22%3A%7B%22key%22%3A%22fp123456_15bf8d9772%22%2C%22res%22%3A%7B%22result%22%3Atrue%2C%22_%22%3A%22_%22%7D%2C%22err%22%3A%5B%5D%7D%7D", "hash": "82cc901615b98153398e4c230ef79eaf" }

Поле server содержит числовое значение, в redirect, audio и hash возвращаются строки. Содержимое поля audio не следует каким-либо образом менять или перекодировать.

Сохранение результата

Чтобы сохранить аудиозапись, вызовите метод audio.save с параметрами server, audio, hash, полученными на предыдущем этапе.

Загрузка видеозаписей

Допустимые форматы: AVI, MP4, 3GP, MPEG, MOV, MP3, FLV, WMV.

Поле POST-запроса: video_file.

Получение адреса

Вызовите метод video.save, чтобы получить адрес для загрузки видео. С помощью этого метода вы также можете задать название, описание видео и его настройки приватности. Если вы хотите загрузить видео с внешнего видеохостинга, необходимо передать адрес страницы с видео в параметре link, а затем просто перейти по адресу из upload_url, не выполняя следующих пунктов.

Передача файла

Передайте файл на адрес upload_url, полученный в предыдущем пункте, сформировав POST-запрос с полем video_file. Это поле должно содержать видеофайл в формате multipart/form-data.

После успешной загрузки сервер возвращает в ответе JSON-объект с полями size, video_id:

JSON{ "size": 1234, "video_id": 1234567 }

Поля size и video_id содержат числовые значения.

Сохранение результата

После загрузки видеозапись проходит обработку и в списке видеозаписей может появиться спустя некоторое время.

Загрузка документов

Допустимые форматы: любые форматы за исключением mp3 и исполняемых файлов.

Ограничения: файл объемом не более 200 МБайт.

Поле POST-запроса: file.

Получение адреса

Вызовите метод docs.getUploadServer, docs.getWallUploadServer (для загрузки на стену) или docs.getMessagesUploadServer (для загрузки документа в сообщение), чтобы получить адрес для загрузки документа. Если вы хотите загрузить документ в сообщество, передайте его идентификатор в параметре group_id.

Передача файла

Передайте файл на адрес upload_url, полученный в предыдущем пункте, сформировав POST-запрос с полем file. Это поле должно содержать файл в формате multipart/form-data.

После успешной загрузки сервер возвращает в ответе JSON-объект с полем file:

JSON{ "file": "123456|65421|0|415317|20ee43693a|jpg|81897|Document.jpg|6798bc4fe908cc476cb1c13ce844a985|105d984a920fe7ee9042681bb6d30fbd|m_20ee43693a||m:130x72,s:100x55,x:604x331,y:807x442,o:748x409" }

Поле file содержит строку.

Сохранение результата

Чтобы сохранить документ, вызовите метод docs.save с параметром file, полученным на предыдущем этапе.

Загрузка обложки сообщества

Допустимые форматы: JPG, PNG, GIF.

Ограничения: минимальный размер фото — 795px x 265px, сумма высоты и ширины не более 14000px, файл объемом не более 50 МБайт. Рекомендуемый размер: 1590x530px. В сутки можно загрузить не более 1500 обложек.

Поле POST-запроса: photo.

Получение адреса

Вызовите метод, чтобы получить адрес для загрузки фото. Необходимо указать координаты обрезки фотографии в параметрах crop_x, crop_y, crop_x2, crop_y2.

Передача файла

Передайте файл на адрес upload_url, полученный в предыдущем пункте, сформировав POST-запрос с полем photo. Это поле должно содержать изображение в формате multipart/form-data.

После успешной загрузки сервер возвращает в ответе JSON-объект с полями hash и photo:

JSON{ "hash": "402784f0ec814632ac","photo":"eyJvaWQiOi0zNzI3MzTUsMjAwIiwwLCIxNjgwLDEwNTAiLCI3OTUsNDk3Il0sImJ3YWN0Ijoib3duZXJfY292ZXIiLCJzZXJ2ZXIiOjYzODYyOSwibWlkIjoyMzE0ODUyLCc4MSwiZGF0YSI6WyJ4QUFtLXBRQUFBQUFtRUxmY0FBS3A2VEh4bU5WYmJKOG5ZQUFLcDZ2VkMtWjRVMXdmbk9BQUtwNnnMXVvUGdxYkNBQUtwN21nSGJwQlJJdnMxRhpdWM5bldkRktwQUFBS3A3R1NhdFptbFJWNlNCQUFLcDdVamJEFBS3A3NUktQnJTSHotS0hFQUFLcDhLVVRTbzA4VURpTSIsIjAsMCw3OJfc2lnIjoiNjNkNmQ5NmY1ZmI0NWFiYzdjYjZjMjliOGM5NWNhNWMifQ" }

Оба поля содержат строки.

Сохранение результата

Чтобы сохранить фотографию, вызовите метод , передав параметры hash и photo, полученные на предыдущем этапе.

Загрузка аудиосообщения

Допустимые форматы: Ogg Opus.

Ограничения: частота дискретизации — 16 кГц, битрейт — 16 кбит/с, длительность — не более 5 минут, моно.

Поле POST-запроса: file.

Получение адреса

Вызовите метод docs.getMessagesUploadServer с параметром type = audio_message, чтобы получить адрес для загрузки.

Передача файла

Передайте файл на адрес upload_url, полученный в предыдущем пункте, сформировав POST-запрос с полем file. Это поле должно содержать файл в формате multipart/form-data.

После успешной загрузки сервер возвращает в ответе JSON-объект с полем file:

JSON{ "file": "123456|65421|0|415317|20ee43693a|jpg|81897|Document.jpg|6798bc4fe908cc476cb1c13ce844a985|105d984a920fe7ee9042681bb6d30fbd|m_20ee43693a||m:130x72,s:100x55,x:604x331,y:807x442,o:748x409" }

Поле file содержит строку.

Сохранение результата

Чтобы сохранить документ, вызовите метод docs.save с параметром file, полученным на предыдущем этапе.

После успешной загрузки вы можете отправить его, используя метод messages.send (параметр attachment).

Загрузка истории

Допустимые форматы: JPG, PNG, GIF.

Ограничения: сумма высоты и ширины не более 14000px, файл объемом не более 10 МБайт.

Формат видео: h264 video, aac audio, максимальное разрешение 720px х 1280px, 30fps.

Поле POST-запроса: file для фотографии, video_file для видеозаписи.

Получение адреса

Вызовите метод stories.getPhotoUploadServer или stories.getVideoUploadServer, чтобы получить адрес для загрузки фото или видео.

Передача файла

Передайте файл на адрес upload_url, полученный в предыдущем пункте, сформировав POST-запрос с полем file/video_file.

Это поле должно содержать изображение или видеоролик в формате multipart/form-data.

После успешной загрузки сервер возвращает строку upload_result.

Сохранение результата

Для сохранения загруженных историй нужно вызвать stories.save, передав в поле upload_results строку, полученную на предыдущем этапе.