Поиск файла в Nextcloud - PullRequest
0 голосов
/ 27 августа 2018

Мне нужно проверить, есть ли у меня файл в моем 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 для загрузки файла с этим же пользователем.

1 Ответ

0 голосов
/ 27 августа 2018

В конце концов я нашел более простой способ проверить, существует ли файл:

url='http://example.com/index.html'
if ( curl -o/dev/null -sfI "$url" ); then
  echo "URL exists"
else
  echo "URL does not exist"
fi

К этой команде curl вы можете добавить параметр --user, если вам нужна аутентификация.

Я нашел это здесь .

...