Как я могу автоматически сохранять изображения в другую папку с CK Finder 3 - PullRequest
0 голосов
/ 19 марта 2019

Я испытываю трудности с получением новой версии CKFinder (CKFinder 3), работающей так же, как и старая версия. Система, используемая для автоматического обнаружения файлов изображений и сохранения их в подпапке «images», а для всех остальных файлов - в подпапке «files».

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

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

В настоящее время я настроил config.php для CKFinder 3 следующим образом:

$config['backends'][] = array(
    'name'         => 'default',
    'adapter'      => 'local',
    'baseUrl'      => $baseDir, // "/mywebsite/sites/default/uploads/"
    //'root'         => '', // Can be used to explicitly set the CKFinder user files directory.
    'chmodFiles'   => 0777,
    'chmodFolders' => 0755,
    'filesystemEncoding' => 'UTF-8',
);


/*================================ Resource Types =====================================*/
// https://ckeditor.com/docs/ckfinder/ckfinder3-php/configuration.html#configuration_options_resourceTypes

$config['defaultResourceTypes'] = '';

$config['resourceTypes'][] = array(
    'name'              => 'Files', // Single quotes not allowed.
    'directory'         => '/files/',
    'maxSize'           => '10M',
    'allowedExtensions' => '7z,aiff,asf,avi,bmp,csv,doc,docx,fla,flv,gz,gzip,mid,mov,mp3,mp4,mpc,mpeg,mpg,ods,odt,pdf,ppt,pptx,pxd,qt,ram,rar,rm,rmi,rmvb,rtf,sdc,sitd,swf,sxc,sxw,tar,tgz,tif,tiff,txt,vsd,wav,wma,wmv,xls,xlsx,zip,gif,jpeg,jpg,png,svg',
    'deniedExtensions'  => '',
    'backend'           => 'default',
);

$config['resourceTypes'][] = array(
    'name'              => 'Images',
    'directory'         => '/images/',
    'maxSize'           => '500K',
    'allowedExtensions' => 'bmp,gif,jpeg,jpg,png,svg',
    'deniedExtensions'  => '',
    'backend'           => 'default',
);

Любая помощь приветствуется, спасибо !!

1 Ответ

1 голос
/ 19 марта 2019

Система, используемая для автоматического обнаружения файлов изображений и сохранения их в подпапке «images», а для всех других файлов - в подпапке «files».

Это неверно,CKFinder никогда не работал так.Хотя вы можете добиться такого поведения, используя плагин коннектора.

Допустим, я хочу, чтобы все загруженные изображения были помещены в Images:/, а другие файлы должны идти в Files:/.

<?php

// plugins/MyPlugin/MyPlugin.php

namespace CKSource\CKFinder\Plugin\MyPlugin;

use CKSource\CKFinder\CKFinder;
use CKSource\CKFinder\Event\BeforeCommandEvent;
use CKSource\CKFinder\Event\CKFinderEvent;
use CKSource\CKFinder\Image;
use CKSource\CKFinder\Plugin\PluginInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class MyPlugin implements PluginInterface, EventSubscriberInterface
{
    public function setContainer(CKFinder $app) {}

    public function getDefaultConfig() {
        return [];
    }

    public static function getSubscribedEvents()
    {
        return [
            CKFinderEvent::BEFORE_COMMAND_FILE_UPLOAD => 'handleBeforeFileUpload',
            CKFinderEvent::BEFORE_COMMAND_QUICK_UPLOAD => 'handleBeforeFileUpload'
        ];
    }

    public function handleBeforeFileUpload(BeforeCommandEvent $event) {
        $request = $event->getRequest();

        /** @var \Symfony\Component\HttpFoundation\File\UploadedFile $uploadedFile */
        $uploadedFile = $request->files->get('upload');

        if ($uploadedFile && $uploadedFile->isValid()) {
            $resourceType = 'Files';

            if (Image::isSupportedExtension($uploadedFile->getClientOriginalExtension())) {
                $resourceType = 'Images';
            }

            $request->query->set('type', $resourceType);
            $request->query->set('currentFolder', '/');
        }
    }
}

Сохраните вышеуказанный код плагина как plugins/MyPlugin/MyPlugin.php и включите его в config.php:

$config['plugins'] = ['MyPlugin'];
...