suver/yii2-behavior-upload

文件上传行为

安装: 79

依赖者: 0

建议者: 0

安全: 0

星级: 1

关注者: 2

分支: 2

公开问题: 0

类型:yii2-extension

1.0.14 2018-07-27 09:50 UTC

This package is not auto-updated.

Last update: 2024-09-28 20:08:59 UTC


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