---
metadata:
  - name: generator
    content: Diplodoc Platform v5.44.0
alternate:
  - https://yandex.com/dev/disk/doc/en/reference/put.md
  - https://yandex.com/dev/disk/doc/ru/reference/put.md
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com/dev/disk/doc/ru/llms.txt

# Загрузка файла (PUT)

Загрузить файл на Яндекс Диск можно с помощью метода [PUT](http://www.webdav.org/specs/rfc4918.html#METHOD_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/## на Диске пользователя, указывая контрольную сумму и хэш для проверки дубликатов.
>
> ```yaml
> 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
>
> <содержимое файла>
> ```
