Публикация файлов и папок
Файлы и папки, загруженные на Яндекс Диск, можно опубликовать: сгенерировать ссылку, по которой они будут доступны не только владельцу Диска.
Опубликованным файлам и папкам можно вернуть статус личных — сгенерированные публичные ссылки перестанут работать.
Признак публичности устанавливается и редактируется с помощью метода PROPPATCH
. Чтобы опубликовать файл или папку, свойству public_url
в пространстве имен urn:yandex:disk:meta
следует присвоить любое непустое значение.
Публикация папки
Публикуется папка /public_folder/, расположенная в корневой папке Диска пользователя.
PROPPATCH /public_folder/ HTTP/1.1 User-Agent: my_application/0.0.1 Host: webdav.yandex.ru Authorization: OAuth 0c4182a7c2cf4521964a72ff57a34a07 Content-Length: 158 <propertyupdate xmlns="DAV:"> <set> <prop> <public_url xmlns="urn:yandex:disk:meta">true</public_url> </prop> </set> </propertyupdate>
Если папка опубликована успешно, сервер отвечает следующим образом:
HTTP/1.1 207 Multi-Status Content-Type: application/xml; charset="utf-8" Content-Length: 390 <?xml version="1.0" encoding="utf-8"?> <d:multistatus xmlns:d="DAV:"> <d:response> <d:href>/public_folder/</d:href> <d:propstat> <d:status>HTTP/1.1 200 OK</d:status> <d:prop> <public_url xmlns="urn:yandex:disk:meta"> https://yadi.sk/d/AaaBbb1122Ccc </public_url> </d:prop> </d:propstat> </d:response> </d:multistatus>
Ссылка на опубликованную папку возвращается в значении элемента
public_url
. Если вы пытаетесь опубликовать уже опубликованную папку, Яндекс Диск возвращает ссылку, сгенерированную при изначальной публикации.
Публикация файла
Публикуется файл readme.txt, расположенный в папке /public_folder/ Диска пользователя.
PROPPATCH /public_folder/readme.txt HTTP/1.1 User-Agent: my_application/0.0.1 Host: webdav.yandex.ru Authorization: OAuth 0c4182a7c2cf4521964a72ff57a34a07 Content-Length: 158 <propertyupdate xmlns="DAV:"> <set> <prop> <public_url xmlns="urn:yandex:disk:meta">true</public_url> </prop> </set> </propertyupdate>
Если файл опубликован успешно, сервер отвечает следующим образом:
HTTP/1.1 207 Multi-Status Content-Type: application/xml; charset="utf-8" Content-Length: 400 <?xml version="1.0" encoding="utf-8"?> <d:multistatus xmlns:d="DAV:"> <d:response> <d:href>/public_folder/readme.txt</d:href> <d:propstat> <d:status>HTTP/1.1 200 OK</d:status> <d:prop> <public_url xmlns="urn:yandex:disk:meta"> https://yadi.sk/d/AaaBbb1122Ccc </public_url> </d:prop> </d:propstat> </d:response> </d:multistatus>
Ссылка на опубликованный файл возвращается в значении элемента
public_url
. Если вы пытаетесь опубликовать уже опубликованный файл, Яндекс Диск возвращает ссылку, сгенерированную при изначальной публикации.
Закрытие опубликованного файла
Файл readme.txt, расположенный в папке /public_folder/ Диска пользователя, переводится в статус «личный» — свойство
public_url
удаляется.
PROPPATCH /public_folder/readme.txt HTTP/1.1 User-Agent: my_application/0.0.1 Host: webdav.yandex.ru Authorization: OAuth 0c4182a7c2cf4521964a72ff57a34a07 Content-Length: 149 <propertyupdate xmlns="DAV:"> <remove> <prop> <public_url xmlns="urn:yandex:disk:meta" /> </prop> </remove> </propertyupdate>
В ответ Яндекс Диск подтвердит, что значение свойства стало пустым:
HTTP/1.1 207 Multi-Status Content-Type: application/xml; charset="utf-8" Content-Length: 336 <?xml version="1.0" encoding="utf-8"?> <d:multistatus xmlns:d="DAV:"> <d:response> <d:href>/public_folder/readme.txt</d:href> <d:propstat> <d:status>HTTP/1.1 200 OK</d:status> <d:prop> <public_url xmlns="urn:yandex:disk:meta" /> </d:prop> </d:propstat> </d:response> </d:multistatus>
При попытке закрыть неопубликованный файл ответ сервера остается таким же: Яндекс Диск сообщает о пустом значении свойства.
Проверка публичности
Проверяется публичность папки /public_folder/: с помощью метода
PROPFIND
запрашивается значение свойстваpublic_url
.
PROPFIND /public_folder/ HTTP/1.1 User-Agent: my_application/0.0.1 Host: webdav.yandex.ru Authorization: OAuth 0c4182a7c2cf4521964a72ff57a34a07 Depth: 0 Content-Length: 105 <propfind xmlns="DAV:"> <prop> <public_url xmlns="urn:yandex:disk:meta"/> </prop> </propfind>
Если папка опубликована, сервер возвращает публичную ссылку в значении свойства:
HTTP/1.1 207 Multi-Status Content-Type: application/xml; charset="utf-8" Content-Length: 390 <?xml version="1.0" encoding="utf-8"?> <d:multistatus xmlns:d="DAV:"> <d:response> <d:href>/public_folder/</d:href> <d:propstat> <d:status>HTTP/1.1 200 OK</d:status> <d:prop> <public_url xmlns="urn:yandex:disk:meta"> https://yadi.sk/d/AaaBbb1122Ccc </public_url> </d:prop> </d:propstat> </d:response> </d:multistatus>
Если папка не опубликована, сервер сообщает о пустом значении свойства:
HTTP/1.1 207 Multi-Status Content-Type: application/xml; charset="utf-8" Content-Length: 340 <?xml version="1.0" encoding="utf-8"?> <d:multistatus xmlns:d="DAV:"> <d:response> <d:href>/public_folder/</d:href> <d:propstat> <d:status>HTTP/1.1 404 Object Not Found</d:status> <d:prop> <public_url xmlns="urn:yandex:disk:meta" /> </d:prop> </d:propstat> </d:response> </d:multistatus>