ozerich/yii2-filestorage-db Extension for file uploading and attaching to the models

  1. Installation
  2. Usage
  3. Console commands

Installation

The preferred way to install this extension is through composer.

Either run

php composer.phar require ozerich/yii2-filestorage-db "*"

or add

"ozerich/yii2-filestorage-db": "*"

to the require section of your composer.json file.

Add component configuration to your config.php

    'components' => [
        'media' => [
            'class' => 'ozerich\filestorage\FileStorage',
            'scenarios' => [
                'avatar' => [
                    'storage' => [
                        'type' => 'file',
                        'saveOriginalFilename' => false,
                        'uploadDirPath' => __DIR__ . '/../../web/uploads/avatars',
                        'uploadDirUrl' => '/uploads/avatars',
                    ],
                    'validator' => [
                        'maxSize' => 2 * 1024 * 1024,     // 2 MB
                        'checkExtensionByMimeType' => true,
                        'extensions' => ['jpg', 'jpeg', 'bmp', 'gif', 'png']
                    ],
                    'thumbnails' => [
                        [
                            'width' => 500
                        ],
                        [
                            'height' => 500
                        ],
                        [
                            'alias' => 'preview',
                            'width' => 250,
                            'сrop' => true,
                            '2x' => true,
                            'force' => true,
                            'webp' => true
                        ],
                        [
                            'width' => 200,
                            'height' => 200,
                            'exact' => true
                        ],
                    ],
                    'quality' => 75
                ],
                'document' => [
                    'storage' => [
                        'type' => 'file',
                        'uploadDirPath' => __DIR__ . '/../../web/uploads/documents',
                        'uploadDirUrl' => '/uploads/documents',
                    ],
                    'validator' => [
                        'maxSize' => 20 * 1024 * 1024,      // 20 MB
                        'checkExtensionByMimeType' => true,
                        'extensions' => ['pdf', 'doc'],
                    ],
                ]
            ]
        ]
    ]

Add media component to bootstrap

    'config' => [
        'bootstrap' => [..., 'media'],
    ]

Add migrations path to your console config (console.php)

    'config' => [
        'controllerMap' => [
            'migrate' => [
                'class' => 'yii\console\controllers\MigrateController',
                'migrationNamespaces' => [
                    'ozerich\filestorage\migrations',
                ],
            ],
        ],
    ]

Apply migrations

php yii migrate/up

Usage

Example usage (get file from HTTP request):

    /* app\controllers\UploadController.php */
    
    public function actionImage()
    {
        Yii::$app->response->format = 'json';
        $file = UploadedFile::getInstanceByName('file');
     
        $model = Yii::$app->media->createFileByUploadedFile($file, 'avatar');
    
        return [
            'image' => $model->toJSON()
        ];
    }

Output will be:

    {
        "id": 1,
        "url": "http://localhost/uploads/images/W7/LK/W7LK3u5LJ7LGtc0nlGOqinl_AVZlinQH.jpg",
        "name": "test-file.jpg",
        "ext": "jpg",
        "mime": "image/jpeg",
        "size": 64749,
        "thumbnails": [
            {
                "id": "1_ORIGINAL",
                "thumb": "ORIGINAL",
                "width": 450,
                "height": 800,
                "url": "http://localhost/uploads/images/W7/LK/W7LK3u5LJ7LGtc0nlGOqinl_AVZlinQH.jpg",
                "url@2x": null
            },
            {
                 "id": "1_500xAUTO",
                 "thumb": "500xAUTO",
                 "width": 500,
                 "height": 200,
                 "url": "http://localhost/uploads/images/W7/LK/W7LK3u5LJ7LGtc0nlGOqinl_AVZlinQH_500_AUTO.jpg",
                 "url@2x": null
            },
            {
                 "id": "1_AUTOx500",
                 "thumb": "AUTOx500",
                 "width": 260,
                 "height": 500,
                 "url": "http://localhost/uploads/images/W7/LK/W7LK3u5LJ7LGtc0nlGOqinl_AVZlinQH_AUTO_500.jpg",
                 "url@2x": null
            },
            {
                 "id": "1_200x200",
                 "thumb": "200x200",
                 "width": 200,
                 "height": 200,
                 "url": "http://localhost/uploads/images/W7/LK/W7LK3u5LJ7LGtc0nlGOqinl_AVZlinQH_200_200.jpg",
                 "url@2x": "http://localhost/uploads/images/W7/LK/W7LK3u5LJ7LGtc0nlGOqinl_AVZlinQH_200_200@2x.jpg"
            }
        ]
    }

Example usage (load file from url):

    /* app\models\User.php */
    
    public function setUserAvatarFromUrl($image_url)
    {
       $image = $media->createFileFromUrl($image_url, 'avatar');
       $this->avatar_image_id = $image->id;
    }

Example usage (load file from base64string):

    /* app\controllers\UploadController.php */
    
    public function actionImage()
    {
        Yii::$app->response->format = 'json';
        $base64string = Yii::$app->request->post('data');
        $filename = Yii::$app->request->post('filename');
     
        $model = Yii::$app->media->createFileFromBase64($base64string, $filename, 'avatar');
    
        return [
            'image' => $model->toJSON()
        ];
    }

Console commands

To use console commands you should create a file FilestorageController.php at your commands folders.

<?php

namespace app\commands;

class FilestorageController extends \ozerich\filestorage\console\FilestorageController
{
    // className of your File model
    public $modelClass = 'app\models\Image';
}

If you did not use console commands at your projects, don't forget to confugure them, you should insert code in your config/console.php

    'controllerNamespace' => 'app\commands',

List of commands:

  1. php yii filestorage/fix-thumbnails - Regenerate thumbnails of all images
0 0
2 followers
1 825 downloads
Yii Version: 2.0
License: MIT
Category: Web Service
Developed by: Vital Ozierski
Created on: Mar 26, 2018
Last updated: (not set)
Packagist Profile
Github Repository

Related Extensions