[WebDAV] Медиа источник для облачных хранилищ

Предлагаю вашему вниманию компонент для связи с облачными хранилищами по протоколу WebDAV.
Поддерживает работу с Yandex.Disk (пример в конце).

В способах применения вас ограничивает фантазия и пропускная способность канала — бэкапы, хранение своего цифрового добра, может быть раздача файлов из хранилища — все на ваш вкус.

Драйвер умеет:
  • Перечислить содержимое каталога
  • Загрузить файлы
  • Создать файл
  • Редактировать файл
  • Удалить каталог/файл
  • Переносить элементы в дереве перетягиванием
  • Кэшировать содержимое каталога и мета-информацию о файле
  • Получать ресурс опосредованно через сайт
Некоторые особенности реализации.
Для компонента написана миниатюрная библиотека для работы по протоколу WebDAV.

Загрузка файлов на удаленный сервер выполняется опосредованного через сайт, соответственно, встречаются ограничения установленные на сайте по максимальному размеру принимаемых файлов.

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

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

Рассмотрим пример подключения к облаку Yandex Disk.

Проходим путь созидания нового источника:

1. Медиа -> Источники файлов -> Создать новый источник
2. Задаем название в духе «Yandex Disk», тип WebDAV. Сохраняем.
3. Правой кнопкой в списке по новоиспеченному источнику -> Редактировать
4. Прописываем параметры:
server: https: //webdav.yandex.ru (без пробелов)
authMethod: Basic
proxy: true
verifySSL: false (задел на будущее)
login, password: данные учетной записи.
Сохраняем, готово. Для доступа извне пропишите доступ пользователей к политике load.

Ежели вам потребно обращаться не к корневому каталогу хранилища, укажите нужный дочерний каталог в параметре basePath. Путь к файлам в обработчиках будет отсчитываться от этого basePath.
Виталий Чекрыжев
25 марта 2015, 08:08
modx.pro
6
4 905
+8

Комментарии: 21

Константин
01 апреля 2015, 12:34
0
А можно ли как то из источника Filesystem перекопировать файлы в источник YandexDisk?
    Виталий Чекрыжев
    01 апреля 2015, 14:17
    0
    Да, возможно копирование объектов файловой системы. Воспользуйтесь методом загрузки UploadObjectsToContainer($container, array $objects = array()).
      Константин
      01 апреля 2015, 14:29
      0
      А можно как то по подробней расписать, а то из одной строки не совсем понятно о чем идет речь?
        Виталий Чекрыжев
        02 апреля 2015, 20:15
        0
        Для копирования файлов вам понадобится написать код.
        Общая идея такая:
        1. Получение объекта для медиа источника откуда будете копировать, инициализация
        2. Получение объекта для медиа источника куда будете копировать, инициализация
        3. Получение списка файлов для копирования
        4. Перебор списка файлов с вызовом UploadObjectsToContainer медиа источника назначения
    Jenya Filimonov
    11 апреля 2015, 10:17
    0
    Подскажите пожалуйста, умеет ли ваш компонент работать с Dropbox.
    И если да, то способен ли phpthumbof получить правильные ссылки с него для превью?
    Пользуюсь dropbox-2.1.2+MIGX+phpthumbof и случилась проблема с которой не способен справиться.
    modxclub.ru/topics/dropbox-2.1.2migxphpthumbof-1637.html
      Виталий Чекрыжев
      12 апреля 2015, 07:45
      0
      Dropbox не поддерживает WebDAV и, как они заявляют, вряд ли когда будут.
      maxamin
      24 апреля 2015, 23:21
      0
      А как просто разместить ссылку на файл из Яндекс Диска? В Modx файл виден, но ссылки для скачивания не создать…
        Виталий Чекрыжев
        26 апреля 2015, 07:56
        0
        Расширения Яндекс диска не работают, скачивание файлов через прокси.
          maxamin
          07 мая 2015, 23:34
          0
          Как это через прокси? Я так еще ни разу не делал, может подскажете?
            Виталий Чекрыжев
            12 мая 2015, 19:32
            0
            Если сервер WebDAV не дает прямого доступа к скачиванию файлов вы можете захотеть воспользоваться процессором-посредником.
            URL создается из: `http://yoursite.ru/assets/components/webdav/index.php?ctx=web&action=proxy&source=SOURCEID&src=path/file.ext`
              maxamin
              12 мая 2015, 19:40
              0
              Спасибо, буду пробовать…
                maxamin
                12 мая 2015, 21:51
                0
                Да, работает, спасибо.
                SOURCEID у меня = 2, т.к. Yandexdisk имеет этот идентификатор после Filesystem. Для ссылки достаточно было «assets/components/webdav/index.php?ctx=web&action=proxy&source=2&src=file.ext». Жаль, что только при скачивании файл с малоизвестным расширением переименовывается в index.php, файл file.zip переименовывается в index.zip, файл file.jpg открывается без переименовываний.
          TITAN-UZ
          25 апреля 2015, 19:27
          0
          Как указать basePath
          [2015-04-25 21:26:37] (ERROR @ /connectors/index.php) [DAV] Error opening dir /: Bad data /
          :(
            Виталий Чекрыжев
            26 апреля 2015, 15:12
            0
            Некорректно настроено подключение. Проверьте путь, логин, пароль.
            Владимир Ульяновский
            26 октября 2015, 16:18
            0
            Виталий помогите… Никак не могу разобраться, где то рядом наверно не не понимаю.

            К яндекс диску подключается нормально, но превьюшки и вообще доступ к файлам получается только через прокси,
            файлы только картинки, но с разными расширениями.
            как выводить их на страницах сайта например в галерею? С Filesystem все работает а с webdav получается битая ссылка даже при включенном прокси…

            При мультисайтинге совсем засада как разделить по контекстам???
            Настройки такие:
              TITAN-UZ
              29 августа 2016, 16:12
              0
              Послу удаления выводить ошибку
              ***/xpdo/xpdo.class.php : 643) Could not load class: WebDAVMediaSource from mysql.webdavmediasource.
              Как вылечит
                TITAN-UZ
                01 сентября 2016, 21:31
                0
                Авто удаления не удаляет медиа ресурс привязанный Yandex диск! Удалил ручную
                Василий Столейков
                03 сентября 2016, 18:23
                0
                ms2Gallery не умеет работать с этим источником?
                Сколько не пытаюсь вывести разные размеры превьюшек, но плейсхолдеры [[+120x90]] разных размеров не геренируются!
                Получается вывести только последний заданный размер превьюшки через плейсхолдер [[+x]], он имеет следующий вид:
                Array
                (
                    [id] => 121
                	...
                    [tags] => 
                    [x] => http://********.com/assets/components/webdav/index.php?action=proxy&source=8&ctx=mgr&src=2031/300x/2.jpg
                )
                Как вытащить нужный размер превьюшек? Или использовать оригинал и пережимать его на лету с phpThumbOn как в старом Gallery было реализовано?
                  Василий Столейков
                  03 сентября 2016, 18:40
                  0
                  Ещё печальнее то, что phpThumbOn вообще не распознаёт ссылку на файл как изображение и не сжимает его… Что же делать тогда?
                  P.S. Настраивался источник файлов по этой статье к Яндексу.
                  kala4off
                  23 октября 2016, 15:04
                  0
                  странно, сделал по инструкции, но медиа ресурс Yandex Disk пуст. А при создании папки пишет «Неизвестная ошибка возникла при создании каталога». Логин и пароль ввожу точно такие же как от яндекс почты. Кто-нибудь подскажет что не так?
                    kala4off
                    23 октября 2016, 16:12
                    0
                    О, так как у меня сайт был размещен в поддеректории mysite.ru/test/ webdav не работал. Попробовал установить на сайт, который в mysite.ru/ — файлы отобразились, но если нажать скачать в админской — выходит Fatal error: Call to a member function make() on null in /var/www/kachaev/data/www/self-vs-self.ru/core/model/modx/processors/browser/file/download.class.php on line 36
                    Как это можно исправить?
                      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                      21