Шаг 1 – получение URL для загрузки
Для этого используется метод video.getUploadUrl.
Так как загрузка производится для определенного пользователя, то понадобится либо access_token, либо session_key, а также разрешение VIDEO_CONTENT от пользователя.
После выполнения запроса к API получаем ответ, в котором указаны будущие id видео и url для загрузки.
Выполнив этот метод, можно перейти к следующему.
Шаг 2 – загрузка видео через HTTP POST
Непосредственная загрузка видео производится на upload_url из первого шага.
Например, при помощи curl:
Поддерживаются 2 способа заливки видео: multipart и возобновляемая загрузка
Multipart загрузка
Такая загрузка проще в реализации, но менее гибкая и не очень надёжная. Определяется по наличию заголовка “Content-Type: multipart/form-data” в HTTP-запросе.
Ограничения multipart загрузки:
- Ограничение файлов до 2 Гб
- Поддерживается только 1 файл на запрос
- Не поддерживается докачка оборванной загрузки
Возобновляемая загрузка
Инициируется при наличии заголовка “Content-Type”, отличного от “multipart/form-data” в HTTP-запросе.
С помощью заголовка Content-Range указывается текущий диапазон и общий размер файла, например:
При разрыве соединения или какой-то ошибке, возможно продолжить загрузку с последнего места. Для этого нужно запросить у сервера последний известный байт и продолжить загрузку с этого места.
Возобновление загрузки имеет смысл после ошибок: REQUESTED_RANGE_NOT_SATISFIABLE и INTERNAL_SERVER_ERROR.
Получение статуса загрузки
Сделав GET-запрос по текущему URL можно получнить текущий статус загрузки: размер файла и последний известный байт. Эту информацию можно использовать для возобновления загрузки после обрыва связи.
Ответ
По заголовку HTTP-ответа можно судить об успешности загрузки видео:
Код | Имя | Комментарий |
---|---|---|
200 | OK | Файл успешно загружен |
201 | CREATED | Успешно загружена часть ranged-запроса |
416 | REQUESTED_RANGE_NOT_SATISFIABLE | Ошибка в указанном диапазоне |
403 | FORBIDDEN | Ошибка доступа |
500 | INTERNAL_SERVER_ERROR | Внутренняя ошибка сервера |
Шаг 3 – завершение добавления видео
После завершения загрузки видео будет доступно в “моих видеозаписях”, но будет не видно никому, кроме загрузившего его. Для завершения загрузки нужно принять соглашение. Соглашение автоматически принимается после успешного вызова метода video.update.