sergmoro1 / yii2-uploader
文件上传器。一次上传多个文件。快速调整图像大小并在队列中裁剪。任何大小均可。通过鼠标排序。控制上传文件的最大数量。文件描述。易于设置,快速开始。
Requires
- php: >=5.4.0
- bower-asset/jcrop: ^2.0
- npm-asset/jquery-simple-upload: ^1.1
- yiisoft/yii2: ^2.0.0
- yiisoft/yii2-imagine: ^2.2
- yiisoft/yii2-jui: ~2.0.0
- yiisoft/yii2-queue: ^2.3
README
多文件上传,通过鼠标排序文件集合,为文件添加描述,裁剪。使用队列组件调整图像大小。
演示
优势
在应用程序中处理上传图像或文件的一种常用方法。
如果模型需要图像或文件,只需要
- 连接行为,
- 定义它们将存储的子目录,
- 定义所需的图像大小
例如 common\models\User.php
use sergmoro1\uploader\behaviors\HaveFileBehavior; class User extends ActiveRecord { /** * @inheritdoc */ public function behaviors() { return array_merge(parent::behaviors(), [ [ 'class' => HaveFileBehavior::className(), 'file_path' => '/user/', //'check_wh' => false, // not checking min width and height of image 'sizes' => [ //'original' => ['width' => 0, 'height' => 0, 'catalog' => 'original'], // zero values mean not resize 'original' => ['width' => 1200, 'height' => 1200, 'catalog' => 'original'], 'main' => ['width' => 400, 'height' => 400, 'catalog' => ''], 'thumb' => ['width' => 90, 'height' => 90, 'catalog' => 'thumb'], ], ], ]); } }
目录
所有上传文件的详细信息存储在一个名为 onefile
的表中。不需要在需要文件的模型中定义 file
类型的字段。
文件被上传并存储在由三个别名路径的串联定义的目录中:@absolute、@host 和 @uploader。所有别名都应该在适当的配置文件中定义。例如在 common/config/main-local.php
中,如果存储文件夹对 backend
和 fronted
都是相同的。
return [ 'aliases' => [ '@absolute' => '/home/my/site', '@host' => 'http://example.ru', '@uploader' => '/uploads', ],
但是可能存在不同的配置。
如果后端和前端都在同一主机上,则可以留空 @host 别名。对于基本 Yii 模板也是一样。
文件在文件夹中按用户和大小排列。
/uploads/user/2
/uploads/user/2/thumb
/uploads/user/2/original
其中 2
是用户 ID 或 subdir
。 subdir
可以留空,这样所有文件都将保存在一个文件夹中。 subdir
可以在视图中放置小部件时定义。
示例中的大小为 thumb
、main
、original
。可以定义更多大小,但那些是 必须有的
。
安装
安装此扩展的首选方式是通过 composer。
运行以下命令之一:
composer require --prefer-dist sergmoro1/yii2-uploader
或将
"sergmoro1/yii2-uploader": "^2.0.0"
添加到您的 composer.json 文件的要求部分。
运行迁移。
php yii migrate --migrationPath=@vendor/sergmoro1/yii2-uploader/src/migrations
如果您使用了之前的版本 sergmoro1\yii2-byone-uploader
,则只运行下一个迁移。
php yii migrate --migrationPath=@vendor/sergmoro1/yii2-uploader/src/migrations/v1
配置
要将模块注册到应用程序中,请修改 common/config/main.php
(高级)或适当的配置文件。
'modules' => [ 'uploader' => [ 'class' => 'sergmoro1\uploader\Module', ],
在 common/config/main-local.php
或任何其他配置文件中添加适用于您的应用程序的相应行以进行文件存储配置。
return [ 'aliases' => [ '@absolute' => '/home/my/site', '@host' => '', '@uploader' => '/uploads', ],
如果需要使用队列进行图像调整大小,则必须定义 queue
组件。队列组件的名称必须是 queue
。
用法
$model = User::findOne(2); // get top thumb image of the model with image description echo Html::img($model->getImage('thumb'), ['alt' => $model->getFileDescription()) ]); // get top image of the model from main catalog echo Html::img($model->getImage()); // get all images of the model from original catalog with image description $image = $model->getImage('original'); while ($image) { echo Html::img($image, ['title' => $model->getFileDescription()]); $image = $model->getNextImage('original'); }
要执行上传,请在 _form.php
或任何其他视图中放置小部件。
<?= \sergmoro1\uploader\widgets\Uploader::widget([
'model' => $model,
'draggable' => true,
'cropAllowed' => true,
'limit' => 5,
]) ?>
如果需要裁剪图像,则必须定义 original
、main
、thumb
子目录。
可以为单个模型上传任意数量的文件,但文件数量可以通过小部件的 limit
参数进行限制。
如果将 subdir
定义为空字符串,则所有文件都将保存在同一文件夹中,但将在 sizes
中定义的子文件夹中。
<?= Uploader::widget([
'model' => $model,
'subdir' => '',
]) ?>
上传文件描述说明
您可以为文件添加描述。为此,在 _form.php
文件中,在提到的组件中,需要添加参数 appendeixView
。
<?= Uploader::widget([ 'model' => $model, 'appendixView' => '/user/appendix', 'cropAllowed' => true, ]) ?>
并将以下内容添加到视图/views/user/appendix.php
中
<span id='description'> <?= isset($file->vars->description) ? $file->vars->description : ''; ?> </span>
默认定义了 description
字段,但字段不限。
组件选项
cropAllowed (false
)
如果需要裁剪图片,则必须定义 original
、main
、thumb
大小。
裁剪大小由主目录指定,其中 catalor
参数应等于 ''
。
如果此目录设置为方形,则裁剪后的剩余大小也将为方形。
draggable (false
)
如果上传的文件需要交换,则将其设置为 true
。
allowedTypes ( []
)
在客户端控制文件类型,['image/pjpeg', 'image/jpeg', 'image/png', 'image/x-png', 'image/gif', 'image/x-gif']
。如果为空,则表示无限制。
allowedTypesReg ( '/image\\/[jpeg|jpg|png|gif]/i'
)
服务器端控制。如果为空,则无限制。检查允许上传的类型的最佳方式。
appendixView ( ''
)
上传文件附加字段的视图文件名。参见views/user/appendix.php。
minFileSize ( 0
)
最小文件大小(字节)。0
表示无限制。
maxFileSize ( 0
)
最大文件大小(字节)。0
表示无限制。
limit ( 0
)
单个模型上传文件的最大数量。0
表示无限制。
secure ( true
)
需要普通用户授权,但验证可以关闭。
subdir ( null
)
如果设置为 null
(默认),则使用 $model->id
。