Скачать каталог из Nextcloud с python запросами (WebDav) - PullRequest
0 голосов
/ 14 апреля 2020

Я использую экземпляр nextcloud и пытаюсь загрузить каталог с помощью вызова API, используя запросы библиотеки.

Я могу загрузить zip-файл с помощью вызова API. Теперь я хотел бы иметь каталог unzipped в моем экземпляре nextcloud и загрузить его через вызов API. Для меня не имеет значения, получу ли я обратно zip-файл при вызове API , я просто хочу разархивировать его в облаке.

Например, я могу поместить туда разархивированный каталог, и когда я загружаю его в браузер, nextcloud возвращает мне zip-файл. Такое поведение я хочу в вызове API.

Теперь, если я положу туда zip-файл , я могу скачать файл так:

import os
import requests


response = requests.request(
        method="get",
        url=f"https://mycloud/remote.php/dav/files/setup_user/{name_dir}/",
        auth=("my_user", my_token),
    )

    if response.status_code == 200:
        with open("/path/to/my/dir/file_name.zip"), "wb") as file:
            file.write(response.content)

, который пишет мне мой zip-файл, который находится в облаке, в локальный файл имя_файла.zip. Моя проблема в том, что если у меня есть разархивированный каталог в облаке, он не будет работать. Не работает, что означает, что я получаю обратно файл с содержанием:

Это интерфейс WebDAV. Доступ к нему могут получить только клиенты WebDAV, такие как клиент рабочего стола syncl 1036 * Nextcloud.

Я также попытался сделать это с помощью wget wget --recursive --no-parent https://path/to/my/dir, и я получил тот же файл с тем же содержимым обратно ,

Итак, я предполагаю, что WebDav API nextcloud не позволяет мне делать это так, как я хочу. Не мне интересно, что я делаю неправильно или если то, что я хочу, выполнимо. Также я не понимаю, почему в браузере это работает нормально. Я просто выбираю распакованную папку и могу скачать ее одним кликом. В сообществе nextcoud было предложено использовать Rclone (https://help.nextcloud.com/t/download-complete-directory-from-nextcloud-instance/77828), но я бы предпочел не использовать зависимость, которую я должен установить на каждой машине, где я хочу запустить этот код ,

Любая помощь очень ценится! Большое спасибо заранее!

PS: На случай, если кому-то интересно, почему я хотел бы сделать это: это гораздо удобнее, когда я хочу изменить только один файл в моем каталоге в облаке. В противном случае я должен распаковать, изменить файл, заархивировать и загрузить снова.

...