platx / yii2-upload
此包已被废弃,不再维护。未建议替代包。
为 Yii Framework 2 提供有用的上传行为
dev-master
2017-08-10 17:16 UTC
Requires
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2023-07-08 21:13:27 UTC
README
ActiveRecord 模型的文件上传行为。支持以下上传格式:
- POST 方法上传 (https://php.ac.cn/manual/en/features.file-upload.post-method.php)
- 远程文件 URL
- Base64
- 服务器路径
此包包含 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')); ?>