suver / yii2-behavior-upload
文件上传行为
1.0.14
2018-07-27 09:50 UTC
Requires
README
文件上传行为
安装
php composer.phar require --prefer-dist yiisoft/yii2-imagine
安装迁移
yii migrate --migrationPath=@vendor/suver/yii2-behavior-upload/migrations
如何使用
为你的结构创建 @storage 别名
像这样配置你的 nginx 服务器
server {
charset utf-8;
client_max_body_size 128M;
listen 80; ## listen for ipv4
server_name storage.example.com;
root /var/www/com/example/storage/;
index index.php;
location / {
}
}
你必须添加这样的行为
public function behaviors() { return [ [ 'class' => TimestampBehavior::className(), 'value' => new Expression('NOW()'), ], [ 'class' => \suver\behavior\upload\UploadBehavior::className(), 'attribute' => 'photo', 'thumbnail' => [ 'admin_preview' => ['size' => '200x200', 'prefix' => 'v1'], 'admin_preview_without_animate' => ['size' => '100x100', 'prefix' => 'v2', 'option' => ['jpeg_quality' => 10], 'animate' => false], 'medium2' => ['size' => 'x100'], 'medium3' => ['size' => '100'], ], ], ]; }
你必须添加这样的文件规则
/** * @inheritdoc */ public function rules() { return [ ['photo', 'file', 'extensions' => ['jpg','png','gif'], 'maxSize' => 10*1024*1024, 'maxFiles' => 1] ]; }
像这样升级你的上传表单
php
<!-- Get Uploaded image -->
<img src="<?php echo $model->linkedFile('photo')->thumbnail('admin_preview')->byDefault('/images/gogol.jpg') ?>">
<!-- Render upload input -->
<?= $form->field($model, 'photo')->fileInput() ?>
这就是你为模型创建上传文件所需创建的所有内容)
你不创建数据库或上传逻辑。你所需要做的就是添加行为和尝试吸烟()))
记住:你的模型类中必须不存在来自 UploadBehavior 选项的文件属性
选项
- attribute - 你的文件属性
- thumbnail - 缩略图配置
-
- size - 图片大小,如 200x150,其中 200 是宽度,150 是高度
-
- prefix - 为文件名添加前缀。当你修改缩略图选项时,感谢我为你提供这些选项)))
-
- option - 保存文件时的选项
-
- preGenerationOff - 如果此选项为 FALSE,则缩略图不会在文件上传后生成
- animate - 如果
animate == false
,则关闭 gif 动画 - instanceByName - 如果为 TRUE,则你的UploadedFile 实例在
UploadedFile::getInstancesByName
上更改 - type - 文件类型。例如:image。所有类型请见
UploadBehavior::$types
- fileModel - 你用于修改文件的模式。你的类必须是 FileInterface 的实例,如 ImageFile 类
- messageFileNotFound - 如果文件找不到,你将看到这条消息
- multiUpload - 如果为 TRUE,你可以上传多个文件,否则你只能上传一个文件
警告:如果你想要上传多个文件,你必须将 multiUpload=true
添加到行为选项中
上传后使用
例如
<img src="<?php echo $model->linkedFile('photo')->thumbnail('admin_preview')->byDefault('/images/gogol.jpg') ?>">
其他方法
$model->addFile(/var/www/com/example/storage/er/rt/errtsjdhfjsdhsdfsdfsd/errtsjdhfjsdhsdfsdfsd.jpg); // Add file from path $model->addHttpFile(http://storage.example.com/er/rt/errtsjdhfjsdhsdfsdfsd/errtsjdhfjsdhsdfsdfsd.jpg); // Add file from http $model->httpFileExists(http://storage.example.com/er/rt/errtsjdhfjsdhsdfsdfsd/errtsjdhfjsdhsdfsdfsd.jpg); // return TRUE if remote file is exists else FALSE var_dump($model->linkedFiles('photo')); //=> [ // ImageFile object, // File object, // ImageFile object, // ] // return list of uploaded file object echo $model->linkedFile('photo') // if exists you see http://storage.example.com/er/rt/errtsjdhfjsdhsdfsdfsd/errtsjdhfjsdhsdfsdfsd.jpg // if NOT exists you see '' $model->linkedFile('photo')->thumbnail('admin_preview') // if exists you see http://storage.example.com/er/rt/errtsjdhfjsdhsdfsdfsd/v1_errtsjdhfjsdhsdfsdfsd_200x200.jpg // if NOT exists you see '' $model->linkedFile('photo')->thumbnail('admin_preview')->byDefault('/images/gogol.jpg') // if exists you see http://storage.example.com/er/rt/errtsjdhfjsdhsdfsdfsd/v1_errtsjdhfjsdhsdfsdfsd_200x200.jpg // if NOT exists you see /images/gogol.jpg $model->linkedFile('photo')->getName(); // => errtsjdhfjsdhsdfsdfsd $model->linkedFile('photo')->getExtension(); // => jpg $model->linkedFile('photo')->delete(); // => delete you file $model->linkedFile('photo')->getPath(); // => /er/rt/errtsjdhfjsdhsdfsdfsd/errtsjdhfjsdhsdfsdfsd.jpg $model->linkedFile('photo')->getFullPath(); // => /var/www/com/example/storage/er/rt/errtsjdhfjsdhsdfsdfsd/errtsjdhfjsdhsdfsdfsd.jpg $model->linkedFile('photo')->getDomainPath(); // => http://storage.example.com/er/rt/errtsjdhfjsdhsdfsdfsd/errtsjdhfjsdhsdfsdfsd.jpg $model->linkedFile('photo')->hasFile(); // => TRUE if file exists else FALSE $model->linkedFile('photo')->getType(); // => UploadBehavior::TYPE_IMAGE == 1 $model->linkedFile('photo')->getMimeType(); // => image/jpeg $model->linkedFile('photo')->getSize(); // => 1545454 - image size $model->linkedFile('photo')->getOriginalName(); // => avatar.jpg $model->linkedFile('photo')->getDirectory() // => /er/rt/errtsjdhfjsdhsdfsdfsd $model->linkedFile('photo')->getParams(); // => [width => 1000, height => 1500] $model->linkedFile('photo')->getHash(); // => sdfsdfsfsdfsdfhsdjfh**sdfsdf - MD5 hash for file content