Не скачиваются файлы в media browser
Не скачиваются файлы с медиаисточников webdav(Я.Диск), swift(Selectel), если в дереве каталогов нажать «Скачать файл»
в браузере вываливается ошибка 500:
Логи чистые, с «FileSystem» все качает.
на 2.5.0-pl и 2.5.1-pl одно и то-же.
Вот URL и ответ сервера:
Помогите, может кто сталкивался?
в браузере вываливается ошибка 500:
Логи чистые, с «FileSystem» все качает.
на 2.5.0-pl и 2.5.1-pl одно и то-же.
Вот URL и ответ сервера:
Request URL:http://s6736.h5.modhost.pro/connectors/index.php?action=browser/file/download&download=1&file=secur.png&HTTP_MODAUTH=modx57ea24863915f2.67495657_157ea24a7c1de60.47467349&source=2&wctx=undefined
Request Method:GET
Status Code:500 Internal Server Error
Помогите, может кто сталкивался?
Комментарии: 1
Временный костыль, для того чтобы заработало скачивание из админки по webdav:
Причина в том, что в компоненте webdav не создается объект modFileHandler, почему он не создается, так и не разобрались.
Без редактирования файлов modx не обойтись, т.е. при обновлении надо будет исправлять снова.
1. В файле core/model/modx/modfilehandler.class.php комментируем функцию make (строка 48) и вместо нее вставляем:
3. в файле core/components/webdav/model/webdav/webdavmediasource.class.php комментируем функцию WebDAVMediaSource (в самом начале) и вместо нее вставляем:
Применяйте на свой страх и риск.
Причина в том, что в компоненте webdav не создается объект modFileHandler, почему он не создается, так и не разобрались.
Без редактирования файлов modx не обойтись, т.е. при обновлении надо будет исправлять снова.
1. В файле core/model/modx/modfilehandler.class.php комментируем функцию make (строка 48) и вместо нее вставляем:
public function make($path, array $options = array(), $overrideClass = '',$check = true) {
if($check)
{
$path = $this->sanitizePath($path);
}
$class = 'modFile';
if (!empty($overrideClass)) {
$class = $overrideClass;
} else {
if (is_dir($path)) {
$path = $this->postfixSlash($path);
$class = 'modDirectory';
} else {
$class = 'modFile';
}
}
return new $class($this, $path, $options);
}
2. этом же файле в функции download комментируем (в районе 564 строки)Header('Content-Length: ' . $this->getSize());
3. в файле core/components/webdav/model/webdav/webdavmediasource.class.php комментируем функцию WebDAVMediaSource (в самом начале) и вместо нее вставляем:
class WebDAVMediaSource extends modMediaSource implements modMediaSourceInterface {
private $client;
private $basePath;
private $baseUrl;
private $cached = false;
private $cacheTime = false;
private $proxified = false;
private $preview = false;
private $tmp_file = '';
public $fileHandler; //добавлено
/**
* {@inheritDoc}
* @return boolean
*/
public function initialize() {
parent::initialize();
$properties = $this->getPropertyList();
$this->cached = $this->getOption('cached', $properties, false);
$this->cacheTime = $this->getOption('cacheTime', $properties, 10) * 60;
$this->proxified = $this->getOption('proxy', $properties, false);
$this->preview = $this->getOption('preview', $properties, false);
$this->basePath = $this->getOption('basePath', $properties);
if (substr($this->basePath, -1) != '/')
$this->basePath .= '/';
if ($this->proxified) {
$this->baseUrl = $this->xpdo->getOption('site_url') .
ltrim($this->xpdo->getOption('assets_url'), '/') .
'components/webdav/index.php?action=proxy&source=' . $this->get('id') . '&ctx=' . $this->xpdo->context->key . '&src=';
} else {
$this->baseUrl = $this->getOption('baseUrl', $properties) . '/';
if ($this->basePath != '/')
$this->baseUrl .= $this->basePath;
}
$this->client = new WebDAV_Client(array(
'uri' => $this->getOption('server', $properties),
'path' => $this->basePath,
'user' => $this->getOption('login', $properties),
'password' => $this->getOption('password', $properties),
'auth' => $this->getOption('authMethod', $properties),
'ssl' => $this->getOption('verifySSL', $properties)));
$this->xpdo->lexicon->load('webdav:default', 'webdav:source');
//добавлено
$options = array();
if (!$this->ctx) {
$this->ctx =& $this->xpdo->context;
}
$options['context'] = $this->ctx->get('key');
$this->fileHandler = $this->xpdo->getService('fileHandler','modFileHandler', '',$options);
return true;
}
public function getBasePath($object = '') {
if ($this->proxified) {
$baseUrl = $this->xpdo->getOption('site_url') .
ltrim($this->xpdo->getOption('assets_url'), '/') .
'components/webdav/index.php?action=proxy&source=' . $this->get('id') . '&ctx=web&src=';
}
return $baseUrl;
}
Применяйте на свой страх и риск.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.