Загрузка файла (PUT)
Загрузить файл на Яндекс.Диск можно с помощью метода PUT. Поддерживается закачка сжатых файлов (заголовок Content-Encoding: gzip
) и закачка без объявления общего размера файла (Transfer-Encoding: chunked
).
Перед загрузкой тела запроса с содержимым файла Диск проверяет, не загрузил ли кто-нибудь еще точно такой же файл:
Если файл с тем же размером, суммой MD5 и хэшем SHA-256 уже присутствует в хранилище, сервис возвращает код
201 Created
.Данные о файле следует передавать в заголовках запроса: размер в заголовке
Content-Length
, сумму MD5 в заголовкеEtag
и хэш SHA в заголовкеSha256
.Если такого же файла в хранилище еще нет, сервис отвечает кодом
100 Continue
, разрешая загрузку содержимого файла (клиент должен корректно обрабатывать этот код ответа). После того, как файл будет успешно передан на сервер, Диск возвращает код201 Created
.В начале и в конце загрузки файла проверяется, не выходит ли файл за пределы объема Диска, доступного пользователю. Если места не хватает, сервис возвращает ответ с кодом
507 Insufficient Storage
.
Пример запроса
Приложение загружает файл otpusk.avi в каталог /a/ на Диске пользователя, указывая контрольную сумму и хэш для проверки дубликатов.
PUT /a/otpusk.avi HTTP/1.1
Host: webdav.yandex.ru
Accept: */*
Authorization: OAuth 0c4181a7c2cf4521964a72ff57a34a07
Etag: 1bc29b36f623ba82aaf6724fd3b16718
Sha256: T8A8H6B407D7809569CA9ABCB0082E4F8D5651E46D3CDB762D02D0BF37C9E592
Expect: 100-continue
Content-Type: application/binary
Content-Length: 103134024
<содержимое файла>