如何使用 CK Finder 3 自动将图像保存在不同的文件夹中
How can I automatically save images in different folder with CK Finder 3
我很难让这个更新版本的 CKFinder (CKFinder 3) 像旧版本一样工作。该系统用于自动检测图像文件并将它们存储在 "images" 子文件夹中,对于所有其他文件,则存储在 "files" 子文件夹中。
现在看来,当您在 "browse server" 弹出窗口 window 中导航到文件夹并在单击图像文件夹后添加文件时,图像子文件夹似乎只会将文件保存到其中。无论文件类型如何,上传并单击 "Send to server" 也会将所有文件发送到 "files" 子文件夹。
这个的主要问题是它忽略了为图像设置的文件大小规则,除非您导航到图像文件夹,然后它会强制执行。它也不太方便,因为用户不太可能每次都导航到子文件夹。
目前我已经为 CKFinder 3 设置了 config.php,如下所示:
$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',
);
感谢任何帮助,谢谢!!
The system used to automatically detect image files and store them in an "images" subfolder and for all other files, in a "files" subfolder.
这是不正确的,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'];
我很难让这个更新版本的 CKFinder (CKFinder 3) 像旧版本一样工作。该系统用于自动检测图像文件并将它们存储在 "images" 子文件夹中,对于所有其他文件,则存储在 "files" 子文件夹中。
现在看来,当您在 "browse server" 弹出窗口 window 中导航到文件夹并在单击图像文件夹后添加文件时,图像子文件夹似乎只会将文件保存到其中。无论文件类型如何,上传并单击 "Send to server" 也会将所有文件发送到 "files" 子文件夹。
这个的主要问题是它忽略了为图像设置的文件大小规则,除非您导航到图像文件夹,然后它会强制执行。它也不太方便,因为用户不太可能每次都导航到子文件夹。
目前我已经为 CKFinder 3 设置了 config.php,如下所示:
$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',
);
感谢任何帮助,谢谢!!
The system used to automatically detect image files and store them in an "images" subfolder and for all other files, in a "files" subfolder.
这是不正确的,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'];