mdmsoft/yii2-upload-file

Yii2 文件上传工具

安装数: 27,057

依赖: 2

建议者: 0

安全: 0

星标: 74

关注者: 13

分支: 34

开放问题: 7

类型:yii2-extension

2.0 2016-11-07 09:01 UTC

This package is not auto-updated.

Last update: 2024-09-20 21:48:22 UTC


README

Yii2 文件上传工具

安装

安装此扩展的首选方式是通过 composer

运行以下命令

php composer.phar require mdmsoft/yii2-upload-file "~2.0"

for dev-master

php composer.phar require mdmsoft/yii2-upload-file "dev-master"

或在您的 composer.json 文件的 require 部分添加

"mdmsoft/yii2-upload-file": "~2.0"

使用方法

安装扩展后,通过执行 yii migrate 准备所需的表。

yii migrate --migrationPath=@mdm/upload/migrations

如果您不想使用数据库迁移,可以手动创建所需的表。

CREATE TABLE uploaded_file (
    "id" INT NOT NULL AUTO_INCREMENT,
    "name" VARCHAR(64),
    "filename" VARCHAR(256),
    "size" INT,
    "type" VARCHAR(32),
    PRIMARY KEY (id)
);

按照以下方式修改您的应用程序配置

return [
    ...
    'controllerMap' => [
        'file' => 'mdm\\upload\\FileController', // use to show or download file
    ],
];

然后简单修改您的模型类

public function behaviors()
{
	return [
        ...
		[
			'class' => 'mdm\upload\UploadBehavior',
			'attribute' => 'file', // required, use to receive input file
			'savedAttribute' => 'file_id', // optional, use to link model with saved file.
			'uploadPath' => '@common/upload', // saved directory. default to '@runtime/upload'
            'autoSave' => true, // when true then uploaded file will be save before ActiveRecord::save()
            'autoDelete' => true, // when true then uploaded file will deleted before ActiveRecord::delete()
		],
	];
}

您不需要将额外的属性 file 添加到模型类中。在控制器中

public function actionCreate()
{
    if($model->load(Yii::$app->request->post()) && $model->save()){
        ...
    }
    ...
}

如果您将 mdm\upload\UploadBehavior::$autoSave 设置为 false,则必须调用 saveUploadedFile()

public function actionCreate()
{
    if($model->load(Yii::$app->request->post()) && $model->validate()){
        if($model->saveUploadedFile() !== false){
            $model->save(false);
            ....
        }
        ...
    }
    ...
}

在视图文件中

// in create or update view
<?= $form->field($model,'file')->fileInput(); ?>


// in view
<?= Html::img(['/file','id'=>$model->file_id]) ?>
<!-- assume the uploaded file is image ->

不使用附件行为的使用

除了作为行为使用外,您还可以直接使用 FileModel 保存文件。

public function actionCreate()
{
    ...
    if($model->load(Yii::$app->request->post()) && $model->validate()){
        $file = UploadedFile::getInstance($model, 'file');
        if($fileModel = FileModel::saveAs($file,['uploadPath' => '@common/upload'])){
            $model->fil_id = $fileModel->id;
            $model->save();
            ....
        }
        ...
    }
    
}

但是,您需要将属性 file 添加到模型中。

class MyModel extend ...
{
    public $file; // add this to your model class