[EasyComm+Swift] Загрузка фото и видео отзывов в облако Selectel.
Приветствую, делюсь с сообществом нюансами реализации такой задачи как загрузка файлов, прикрепляемых к отзывам, в облачное хранилище от Selectel.Возможно, эта заметка сэкономит кому-то немного времени.
После того как оба компонента установлены, надо их подружить, хотя очень надеялся, что они подружатся без моей помощи. Но перед этим надо зарегистрироваться в Selectel (кстати 10р он больше не дарит). Тут и начинаются нюансы.
В документации к Swift написано про какую-то корзину для которой нужно создать какую-то ссылку, но в ЛК облачного сервиса такого уже нет и вообще он выглядит не так, как на скриншотах. Но поскольку логика наше всё, не составляет труда догадаться, что корзина это контейнер и он должен быть публичным и его надо как-то назвать. И больше с контейнером ничего делать не нужно. Затем требуется создать дополнительного пользователя и назначить ему недавно созданный контейнер. !!! ВАЖНО у пользователя отметить чекбокс Использовать эти данные для доступа по протоколу S3. Далее идём в админку и создаем новый источник файлов с типом OpenStack. Указываем ему следующие настройки
Править исходники плохая практика, но я не придумал другого решения. Если кто-то знает вариант лучше, поделитесь в комментариях.
После того как оба компонента установлены, надо их подружить, хотя очень надеялся, что они подружатся без моей помощи. Но перед этим надо зарегистрироваться в Selectel (кстати 10р он больше не дарит). Тут и начинаются нюансы.
В документации к Swift написано про какую-то корзину для которой нужно создать какую-то ссылку, но в ЛК облачного сервиса такого уже нет и вообще он выглядит не так, как на скриншотах. Но поскольку логика наше всё, не составляет труда догадаться, что корзина это контейнер и он должен быть публичным и его надо как-то назвать. И больше с контейнером ничего делать не нужно. Затем требуется создать дополнительного пользователя и назначить ему недавно созданный контейнер. !!! ВАЖНО у пользователя отметить чекбокс Использовать эти данные для доступа по протоколу S3. Далее идём в админку и создаем новый источник файлов с типом OpenStack. Указываем ему следующие настройки
- url — 123456.selcdn.ru/container_name/
- container — container_name
- service — оставляем как есть ru-1
- authentication_service — auth.selcdn.ru
- username — логин созданного пользователя
- api_key — его пароль
PHP Fatal error: Uncaught Error: Call to a member function make() on null in /core/components/easycomm/model/easycomm/easycomm.class.php:343Я пошёл посмотреть, чего же нет на 343 строке. И узрел вот это
$d = $this->mediaSource->fileHandler->make($path, array(), 'modDirectory');
if (!$d->exists()) {
if (!$this->mediaSource->createContainer($internalPath, '')) {
$this->modx->log(modX::LOG_LEVEL_ERROR, '[easyComm] Can`t create directory: '.$path);
return false;
}
}
Эмпирическим путём было установлено, что для корректной работы досточно выполнить метод createContainer(). Поэтому я заменил указанный выше кусок кода наif($this->mediaSource->fileHandler){
$d = $this->mediaSource->fileHandler->make($path, array(), 'modDirectory');
if (!$d->exists()) {
if (!$this->mediaSource->createContainer($internalPath, '')) {
$this->modx->log(modX::LOG_LEVEL_ERROR, '[easyComm] Can`t create directory: '.$path);
return false;
}
}
}else{
if (!$this->mediaSource->createContainer($internalPath, '')) {
$this->modx->log(modX::LOG_LEVEL_ERROR, '[easyComm] Can`t create directory: '.$path);
return false;
}
}
И, о чудо, всё заработало!Править исходники плохая практика, но я не придумал другого решения. Если кто-то знает вариант лучше, поделитесь в комментариях.
Поблагодарить автора
Отправить деньги
Комментарии: 8
Да, PR надо заслать, может Василий найдет минутку и влепит его.
Мне кажется если и засылать, то к EasyComm
привет, прочитал статью!
Да, я поправлю и выпущу обновление.
Нюанс в том, кол-во пользователей облаков минимально и никто не сталкивался с этим в easyComm, да и я сам тоже)
Да, я поправлю и выпущу обновление.
Нюанс в том, кол-во пользователей облаков минимально и никто не сталкивался с этим в easyComm, да и я сам тоже)
Дык, я без претензий, просто поделился кейсом. Я бы и сам облаком не пользовался, но заказчик хочет видео отзывы, а на обычном хостинге много не сохранишь, вот и решили воспользоваться облаком, тем более, что всё уже было почти готово)))
но я не придумал другого решенияrefactoring.guru/ru/design-patterns/decorator/php/example
Привет, ты своими словами объясни, а я погуглю, а то ссылка не открывается.
Предположу, Он имеет в виду, что очень умен и тоже может решить подобную задачу, но с уже с применением трех классов вместо одного.
Да уже давно никто не сомневается в его способностях)))
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.