You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CKFinder 3.5(PHP版):如何按上传月份存储文件?

CKFinder 3.5 实现文件按上传月份存储的解决方案

你的旧代码失效是因为CKFinder 3.x完全重构了核心API,旧版本的类(如CKFinder_Connector_Utils_FileSystem)和属性(如_currentFolder)已被废弃,无法适配3.5版本。以下是针对3.5版本的有效实现方案:

方案一:全局修改所有上传的存储路径

在CKFinder的config.php文件中,添加事件监听代码,自动将所有上传的文件存入对应年月的文件夹:

use CKSource\CKFinder\Event\BeforeFileUploadEvent;
use Symfony\Component\EventDispatcher\EventDispatcher;

$config['events'] = function (EventDispatcher $dispatcher) {
    $dispatcher->addListener(BeforeFileUploadEvent::NAME, function (BeforeFileUploadEvent $event) {
        // 获取当前上传的目标文件夹
        $targetFolder = $event->getFolder();
        // 生成年月格式的子文件夹路径(如 2024/08)
        $monthSubfolder = date('Y/m');
        // 创建子文件夹(不存在则自动递归创建)
        $newTargetFolder = $targetFolder->createSubFolder($monthSubfolder);
        // 将上传目标改为新文件夹
        $event->setFolder($newTargetFolder);
    });
};

方案二:仅针对「快速上传(QuickUpload)」命令生效

如果你只想让快速上传的文件存入年月文件夹,可使用以下代码修改请求参数:

use CKSource\CKFinder\Event\BeforeCommandExecuteEvent;
use Symfony\Component\EventDispatcher\EventDispatcher;

$config['events'] = function (EventDispatcher $dispatcher) {
    $dispatcher->addListener(BeforeCommandExecuteEvent::NAME, function (BeforeCommandExecuteEvent $event) {
        $command = $event->getCommandName();
        // 仅处理QuickUpload命令
        if ($command !== 'QuickUpload') {
            return;
        }

        $request = $event->getRequest();
        $container = $event->getContainer();
        
        // 获取后端存储与文件夹实例
        $backendManager = $container->get('backend_manager');
        $folderFactory = $container->get('folder_factory');
        
        $backendName = $request->get('backend', 'default');
        $currentFolderPath = $request->get('currentFolder', '/');
        
        $backend = $backendManager->getBackend($backendName);
        $currentFolder = $folderFactory->create($backend, $currentFolderPath);
        
        // 创建年月子文件夹
        $monthSubfolder = date('Y/m');
        $newFolder = $currentFolder->createSubFolder($monthSubfolder);
        
        // 修改请求中的目标文件夹路径
        $request->query->set('currentFolder', $newFolder->getPath());
    });
};

注意事项

  • 确保服务器对CKFinder的存储目录有写入权限,否则无法自动创建年月文件夹。
  • 测试前请备份原config.php文件,避免配置错误导致功能异常。

内容的提问来源于stack exchange,提问作者Kaaogin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:46:08