Uploader.php 2.1 KB
<?php
/**
 * Created by PhpStorm.
 * User: rlgyzhcn
 * Date: 18-6-1
 * Time: 下午2:32
 */

namespace common\components\uploader;

use common\base\Exception;
use yii\base\Component;
use yii\web\UploadedFile;

class Uploader extends Component
{

    //文件上传前事件
    const EVENT_BEFORE_UPLOAD = 'before_upload';
    //文件上传后事件
    const EVENT_AFTER_UPLOAD = 'after_upload';

    //文件上传对象
    public $upload_class = '';

    //文件上传方法
    public $upload_method = '';

    //文件上传参数
    public $upload_params = [];

    //文件保存目录
    public $absolute = '';

    //文件base uri
    public $baseuri = '';

    /**
     * 上传文件
     * @param $uploaded_file UploadedFile
     * @param $savename string 文件保存名
     * @return bool|string 文件rui or false
     * @throws Exception
     */
    public function upload($uploaded_file, $savename = '')
    {
        if (empty($savename)) {
            $savename = md5(date('Y-m-d H:i:s') . $uploaded_file->tempName) . '.' . $uploaded_file->extension;
        }
        $this->absolute = rtrim(str_replace('\\', '/', $this->absolute), '/') . '/';

        try {
            if (empty($this->upload_class)) {
                //默认保存到本地
                $uploaded_file->saveAs($this->absolute . $savename);
                return rtrim($this->baseuri, '/') . '/' . $savename;
            } else {
                if (class_exists($this->upload_class)) {
                    if (method_exists($this->upload_class, $this->upload_method)) {
                        $this->upload_params = array_push($this->upload_params, $savename, $uploaded_file->tempName);
                        call_user_func_array([$this->upload_class, $this->upload_method], $this->upload_params);
                        return $this->baseuri . $savename;
                    }
                    throw new Exception(2, 'upload method not exists.');
                }
                throw new Exception(1, 'upload class not exists.');
            }
        } catch (Exception $exception) {
            throw $exception;
        }
    }

}