furikuri / yii2-behavior-upload
文件上传行为
dev-master
2018-06-20 20:03 UTC
Requires
This package is not auto-updated.
Last update: 2024-09-21 03:18:25 UTC
README
文件上传行为
安装
php composer.phar require --prefer-dist furikuri/yii2-behavior-upload
安装迁移
yii migrate --migrationPath=@vendor/furikuri/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' => \furikuri\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 - 文件类型。例如:图像。所有类型见
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