Как загрузить файлы на облако Mail.ru используя Python и WebDAV

Как загрузить файлы на облако Mail.ru используя Python и WebDAV

Автор: Рамис | Статьи 28 августа 2022

В этой небольшой статье Вы узнаете как загрузить файлы на облако от Mail.ru, используя Python и протокол WebDAV.

Настройки приложения

Перед тем как подключиться к облаку по WebDAV, необходимо создать пароль для внешнего приложения. Перейдите в настройки по ссылке, добавьте новое приложения и сервис сгенерирует вам пароль.

Настройки WebDAV

Подключение к WebDAV

Для работы с протоколом есть готовая библиотека webdavclient3, установите командой:

pip install webdavclient3

Укажите свои данные (webdav_login: почтовый адрес, и webdav_password: ранее сгенерированный пароль) и попробуйте подключиться.

from webdav3.client import Client

data = {
 'webdav_hostname': "https://webdav.cloud.mail.ru",
 'webdav_login':    "MAIL@mail.ru",
 'webdav_password': "PASSWORD"
}
client = Client(data)

my_files = client.list()
print(my_files)

Данный код выведет список всех файлов хранящихся в главном каталоге облака. В моем случаем результат:

['Горное озеро.jpg', 'Долина реки.jpg']

Если подключение прошло успешно, можете переходить к следующему этапу, и рассмотреть несколько самых интересных методов.

Методы WebDAV Сlient

Создать папку:

client.mkdir("folder")
client.mkdir("folder/files")

Удалить:

client.clean("folder")
Скачать с облака:

client.download_sync(remote_path="Долина реки.jpg", local_path="Долина реки.jpg")
client.download_sync(remote_path="Горное озеро.jpg", local_path=r"C:\Users\username\Downloads\Горное озеро.jpg")
Загрузить в облако:

client.upload_sync(remote_path="/my.txt", local_path="my.txt")
client.upload_sync(remote_path="folder/", local_path=r"C:\Users\username\Downloads\test")

Пример

Для примера разработаем небольшую программу для загрузки файлов в облако.

import sys
from datetime import datetime
from webdav3.client import Client

data = {
 'webdav_hostname': "https://webdav.cloud.mail.ru",
 'webdav_login':    "MAIL@mail.ru",
 'webdav_password': "PASSWORD"
}
client = Client(data)

if not client.check('backup'):
    client.mkdir('backup')

date = datetime.now().strftime("%d%m%Y-%H%M%S")
new_folder = sys.argv[1].split('\\')[-2]
client.upload_sync(remote_path=f"backup/{new_folder}_{date}", local_path=sys.argv[1])
Запустим и укажем каталог для загрузки.

python main.py 'C:\Documents\Project\'

Результат:

загрузка файлов в облако

Дополнительно

Дополнительную информацию можете найти в документации webdavclient3.

Комментарии

AlexSoy
@AlexSoy
09 сентября 2022

Спасибо, то что искал. Подскажите как сделать файл публичным?

Ответить
Рамис
@ramas
12 сентября 2022

@AlexSoy, Пожалуйста. Сразу не обратил внимания, в webdavclient3 есть информация о методах publish and unpublish, но они не реализованы в коде. Попробуйте воспользоваться другой библиотекой https://github.com/CloudPolis/webdav-client-python (webdavclient3 основан на нем).

Ответить
Markdown
Войти