chabberwock/yii2-files

处理异步文件上传的模块

安装: 16

依赖者: 0

建议者: 0

安全性: 0

星标: 0

关注者: 1

分支: 1

开放问题: 0

类型:yii2-extension

0.1.2 2016-10-22 10:42 UTC

This package is not auto-updated.

Last update: 2024-09-28 19:42:07 UTC


README

此模块简化了异步上传的处理。它提供了一个特殊的Session对象,该对象将上传的文件与您的模型关联起来,这样您就可以轻松地稍后处理它们。基于 2amigos/yii2-file-upload-widget

安装

将 "chabberwock/yii2-files": "*" 添加到 composer.json 文件的 "require" 部分

模块安装后,将其添加到配置文件的 modules 部分和 bootstrap 部分

        'files' => [
            'class' => 'chabberwock\files\Module',
            'uploadDir' => __DIR__ . '/../uploads/temp', // temporary storage dir
            'expires' => 3600, // when old uploaded files should be removed
        ],

并且

    'bootstrap' => ['files']

使用方法

在视图中

    // Basic upload
    <?= $form->field($model, 'session_id')->widget('\chabberwock\files\FileUpload') ?>
    // Basic plus UI upload
    <?= $form->field($model, 'session_id')->widget('\chabberwock\files\FileUploadUI') ?>

其中 'session_id' 是一个字符串属性。一旦模型提交,session_id 将包含会话的 id,并且可以轻松访问

    $session = Yii::$app->getModule('files')->findSession($model->session_id);
    foreach ($session->listFiles() as $file) {
        $session->moveFile($file, '/public/uploads');
    }

模块事件

模块在每次文件上传时生成事件,可以用来处理文件

        Yii::$app->on('files.upload', function ($event) use ($app) {
            /** @var \chabberwock\files\Session */
            $session = $event->session;
            if (isset($session->meta['target']) && $session->meta['target'] == 'embed') {
                $file = $event->file;
                $newname = uniqid() . '.' . $file->ext;
                $dirParts = [
                    '/uploads/embed',
                    date('Y'),
                    date('m'),
                    date('d'),
                    $newname
                ];
                $path = $app->basePath . implode(DIRECTORY_SEPARATOR, $dirParts);
                if (!file_exists(dirname($path))) {
                    mkdir(dirname($path), 0755, true);    
                }
                $session->moveFile($file, $path);
                chmod($path, 0755);
                $file->url = implode('/', $dirParts);
            }
        });