Мне нужно проверить, есть ли у меня файл в моем Nextcloud, прежде чем загружать другой (с тем же именем). Я не нашел способа сделать это с помощью curl (команда, которую я использую для загрузки нового файла). Итак, поиск в клиентском API Nextcloud Я нашел поиск в webDAV.
Я пытался использовать его перед загрузкой, чтобы проверить, существует ли файл. Вот чего я добился:
curl -u myUser:myPass 'https://nextcloud.customExample.com/remote.php/dav/' -X SEARCH -u myUser:myPass -H "content-Type: text/xml" --data '<?xml version="1.0" encoding="UTF-8"?>
<d:searchrequest xmlns:d="DAV:" xmlns:oc="http://owncloud.org/ns">
<d:basicsearch>
<d:select>
<d:prop>
<d:displayname/>
</d:prop>
</d:select>
<d:from>
<d:scope>
<d:href>/files/myFolder/myFile.apk</d:href>
<d:depth>infinity</d:depth>
</d:scope>
</d:from>
<d:where>
<d:like>
<d:prop>
<d:getcontenttype/>
</d:prop>
<d:literal>text/%</d:literal>
</d:like>
</d:where>
<d:orderby>
<d:prop>
<oc:size/>
</d:prop>
<d:ascending/>
</d:orderby>
</d:basicsearch>
</d:searchrequest>'
Я получаю эту ошибку при выполнении:
<?xml version="1.0" encoding="utf-8"?>
<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">
<s:exception>Sabre\DAV\Exception\NotFound</s:exception>
<s:message>Principal with name myFolder not found</s:message>
</d:error>
Папка myFolder, как я вижу, находится в корне моего Nextcloud. Я не знаю, нужно ли мне добавить что-то еще (как я добавил «файлы»).
Пользователь имеет разрешения и работает с помощью команды curl для загрузки файла с этим же пользователем.