platx/yii2-upload

此包已被废弃,不再维护。未建议替代包。

为 Yii Framework 2 提供有用的上传行为

安装: 17

依赖者: 0

建议者: 0

安全: 0

星标: 1

关注者: 3

分支: 2

开放问题: 0

类型:yii2-extension

dev-master 2017-08-10 17:16 UTC

This package is not auto-updated.

Last update: 2023-07-08 21:13:27 UTC


README

ActiveRecord 模型的文件上传行为。支持以下上传格式:

此包包含 3 个类

  • FileUploadBehavior - 处理文件的主要行为
  • ImageUploadBehavior - 处理图像文件的扩展类,包括修复 jpeg 图像方向的函数,originalFolder 参数将文件存储在原始大小文件夹中(用于 ImageAction)
  • ImageAction - 生成不同尺寸的图像,将调整大小的文件存储在靠近原始文件夹的文件夹中,命名为 "{width}x{height}.

安装

安装此扩展的首选方法是使用 composer

运行以下命令之一:

php composer.phar require --prefer-dist platx/yii2-upload "*"

"platx/yii2-upload": "*"

将其添加到您的 composer.json 文件的 require 部分。

配置

在您的 ActiveRecord 模型中附加行为

public function behaviors()
{
    return [
        'upload' => [
            'class' => 'platx\upload\FileUploadBehavior',
            // or 'class' => 'platx\upload\ImageUploadBehavior',
            'attributes' => ['image'], // Model attributes to handle
            'scenarios' => ['default'], // Scenarios to handle
            'basePath' => '@app/web/uploads', // Base path on server to store files
            'baseUrl' => '/uploads', // Base url to make url
            // Additional configuration
        ]
    ];
}

platx\upload\FileUploadBehavior 的配置选项

  • attributes - 应该处理的数据模型的属性名称。类型:array必需参数
  • scenarios - 要处理的场景(默认情况下,使用拥有者的模型场景)。类型:array
  • prefix - 要发布的文件属性的名称前缀。类型:string。默认值:file_
  • basePath - 存储文件的服务器路径(使用别名或绝对服务器路径)。类型:string。默认值:@app/web/uploads
  • baseUrl - 基础 URL 以构建文件链接。类型:string。默认值:/uploads
  • handleNotUploadedFiles - 是否处理非 POST 方法上传(base64远程 URL服务器路径)。类型:boolean。默认值:false
  • nameTemplate - 文件名模板或生成新名称。默认值:{id}_{name}.{ext} 。可以是:
    • true - 生成新文件名
    • false - 保留原始文件名
    • string - 生成新文件名的模板,可以包含变量
      • {id} - 记录 ID(如果是复合键,将进行 imploded)
      • {attribute} - 模型属性名称
      • {name} - 文件名
      • {ext} - 文件扩展名
    • \Closure - 要执行的回调函数。匿名函数应具有以下签名
      function ($model, $attribute, $file)
      其中:- $model - 拥有者模型实例 - $attribute - 文件上传的当前属性名称 - $file - 当前要保存的UploadedFile 实例 例如
      function ($model, $attribute, $file) {
          return 'file_' . $model->id . '.' .$file->extension;
      }
  • modelFolder - 是否添加模型名称文件夹。默认值:true。可以是:
    • true - 包含模型文件夹
    • false - 不包含模型文件夹
    • string - 要包含的静态字符串
    • \Closure - 要执行的回调函数。匿名函数应具有以下签名
      function ($model, $attribute, $file)
      其中:- $model:拥有者模型实例 - $attribute:文件上传的当前属性名称 - $file:要上传的当前UploadedFile 实例 例如
      function ($model, $attribute, $file) {
          return 'my_' . $model::getTableSchema()->fullName;
      }
  • dynamicFolder - 是否生成动态文件夹。默认值:true。可以是
    • true - 生成动态文件夹(3层嵌套),使用模型主键
    • false - 不包括动态文件夹
    • string - 静态字符串
    • \Closure - 要执行的回调函数。匿名函数应具有以下签名
      function ($model, $attribute, $file)
      其中:- $model:拥有者模型实例 - $attribute:文件上传的当前属性名称 - $file:要上传的当前UploadedFile 实例 例如
      function ($model, $attribute, $file) {
          return $model::getTableSchema()->fullName . '_' .uniqid();
      }
  • attributeFolder - 是否添加属性文件夹。默认值:true。可以是
    • true - 添加带有属性名称的文件夹
    • false - 不包括属性文件夹
    • string - 静态字符串
    • \Closure - 要执行的回调函数。匿名函数应具有以下签名
      function ($model, $attribute, $file)
      其中:- $model:拥有者模型实例 - $attribute:文件上传的当前属性名称 - $file:要上传的当前UploadedFile 实例 例如
      function ($model, $attribute, $file) {
          return $model::getTableSchema()->fullName . '_' .uniqid();
      }
  • instanceByName - 是否通过属性名称获取文件实例。类型:boolean。默认值:false
  • deleteWithOwner - 是否在删除模型记录时删除文件。类型:boolean。默认值:true
  • deleteTempFile - 是否在保存后删除临时文件。类型:boolean。默认值:true
  • messageUploadNotSupported - 如果上传类型不受支持,显示的错误信息。类型:string。默认值:来自消息源
  • messageUnableSaveFile - 无法将文件保存到目标文件夹时显示的错误信息。类型:string。默认值:来自消息源
  • messageUnableHandleFile - 无法处理上传并创建UploadedFile实例时显示的错误信息。类型:string。默认值:来自消息源
  • messageUnableCreateDirectory - 无法为文件创建目标文件夹时显示的错误信息。类型:string。默认值:来自消息源
  • originalFolder(ImageUploadBehavior) - 存储原始图像文件的文件夹名称(可以在ImageUploadBehavior中更改)。类型:string。默认值:original

要启用文件验证,您应该将其添加到模型规则的数组中,如下所示

public function rules()
{
    return [
        ['file_image', 'file'],
        // or
        ['file_image', 'image'],
    ];
}

在控制器类中附加图像操作

public function actions()
{
    return [
        'upload' => [
            'image' => [
                'class' => \platx\upload\ImageAction::className(),
                'basePath' => '@app/web/uploads',
                'originalFolder' => 'original',
                'sizeList' => ['500x500','200x0','0x300']
            ],
        ]
    ];
}

其中

  • sizeList - 生成图像允许的大小列表,如果为空,则允许任何大小进行缩放。如果您将0放入宽度或高度,则将动态保存图像比例。
  • basePath - 图像上传的基础服务器路径
  • originalFolder - 原始图像文件的文件夹名称

将以下内容添加到您的UrlManager组件规则中

    '/uploads/<width:[\d]+>x<height:[\d]+>/<link:[\w\d\/-_\.]+>' => '/your_controller/image'

用法

要上传文件,使用属性名 {prefix}_{attribute}。要获取文件URL,使用FileUploadBehavior的getFileUrl($attribute, $isAbsolute)函数,对于配置了ImageAction的ImageUploadBehavior,使用getFileUrl($attribute, $isAbsolute, $size),其中

  • $attribute - 您的属性名称
  • $isAbsolute - 是否使您的文件URL为绝对路径(带有http/https和您的站点域名)
  • $size - 以{width}x{height}格式所需的图像大小

例如,您有一个名为image的属性和prefix行为属性等于file_。要上传文件,您应该使用属性file_image。要获取文件URL,您应该使用模型中的函数$model->getFileUrl('image')

示例表单文件

<?php $form = \yii\bootstrap\ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>
    <?= $form->field($model, 'file_image')->fileInput() ?>
    <div class="form-group">
        <?= \yii\helpers\Html::submitButton('Upload', ['class' => 'btn btn-primary']) ?>
    </div>
<?php $form->end(); ?>

示例视图文件

<?= \yii\helpers\Html::img($model->getFileUrl('image')); ?>

或使用配置了ImageAction的情况

<?= \yii\helpers\Html::img($model->getFileUrl('image', false, '100x100')); ?>