chabberwock / yii2-files
处理异步文件上传的模块
0.1.2
2016-10-22 10:42 UTC
Requires
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);
}
});