mdmsoft/yii2-upload-file Yii2 upload file tools

fileupload

Yii2 Upload File

Yii2 tools for upload file

Installation

The preferred way to install this extension is through composer.

Either run

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

for dev-master

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

or add

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

to the require section of your composer.json file.

Usage

Once the extension is installed. Prepare required table by execute yii migrate.

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

if wantn't use db migration. you can create required table manually.

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

Modify your application configuration as follows:

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

Then simply modify your Model class:

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()
        ],
    ];
}

You dont need add extra attribute file to model class. In controller

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

If you set mdm\upload\UploadBehavior::$autoSave to false you must call saveUploadedFile().

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

In view file

// 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 ->

Using Without Attach Behavior

Instead of using as behavior, you can also directly save file using 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();
            ....
        }
        ...
    }

}

But, you need to add attribute file to Model.

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

Changelog

Yii2 Upload File Change Log

1.1.0 Under Development

  • Chg: Change UploadBehavior::$autoSave value to true (mdmunir).

1.0.x

Statistics

Downloads
GitHub Stars
GitHub Forks

Releases

Comments



2.0 is the latest of 7 releases



BSD-3-Clause license
Stats
75 github stars & 33 github forks
12 downloads in the last day
280 downloads in the last 30 days
25830 total downloads