furikuri/yii2-behavior-upload

文件上传行为

安装: 7

依赖: 0

建议者: 0

安全: 0

星标: 0

分支: 0

类型:yii2-extension

dev-master 2018-06-20 20:03 UTC

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