Загрузка файла (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 <содержимое файла>