码农日记

薄洪涛的个人博客

Yii2.0整合ueditor并上传图片到七牛云

某个项目要做一个文章模块,用到Ueditor,并且ue中的图片要上传到七牛,所以总结下步骤;

1、Yii2.0下载ueditor for Yii2.0和七牛

composer require kucha/ueditor "*"
composer require qiniu/php-sdk

2、Utils助手类(这是七牛上传的通用方法,仅作图片上传也可以用到)

/*
 * 通过url上传图片到七牛
 */
public static function SaveQiniu($extension,$file_path){
    //七牛的密钥、域名和空间
    $access_key = Yii::$app->params['access_key'];
    $secret_key = Yii::$app->params['secret_key'];
    $bucket = Yii::$app->params['bucket'];
    //上传7牛的文件的名字及路径
    $name = getUuid().'.'.$extension;
    $folder = substr($name,0,2);
    $file_name = $folder.'/'.$name;
    //授权
    $auth = new Auth($access_key,$secret_key);
    //生成token
    $token = $auth->uploadToken($bucket);
    $uploadManager = new UploadManager();
    try{
        $uploadManager->putFile($token,$file_name,$file_path);
    }catch (\Exception $e){
        return false;
    }
    return $file_name;
}

这里有两个参数,第一个是图片的扩展,第二个是图片上传所产生的临时文件.tmp的路径

这个方法返回的是保存在七牛的图片的路径;

3、如果要保存富文本编辑器中的图片,就需要修改下ueditor的源码了,要注意,第二步的方法是上传普通文件到七牛所封装的方法;

先修改vendor/kucha/ueditor/Uploader.php文件中的upFile()方法,这是上传文件的主方法,找到以下代码

        //移动文件
        if (!(move_uploaded_file($file["tmp_name"], $this->filePath) && file_exists($this->filePath))) { //移动失败
            $this->stateInfo = $this->getStateInfo("ERROR_FILE_MOVE");
        } else { //移动成功
            $this->stateInfo = $this->stateMap[0];
        }

替换成如下代码(注意:可能上传文件的命名不同,但是上传流程不能改动):

//七牛的密钥、域名和空间
$access_key = Yii::$app->params['access_key'];
$secret_key = Yii::$app->params['secret_key'];
$domain = Yii::$app->params['domain'];
$bucket = Yii::$app->params['bucket'];
$auth = new Auth($access_key,$secret_key);
$token = $auth->uploadToken($bucket);
$name = getUuid().$this->fileType;
$folder = substr($name,0,2);
$file_name = $folder.'/'.$name;
$upmanager = new UploadManager();
list($ret,$error) = $upmanager->putFile($token,$file_name,$file['tmp_name']);
if($error==null){
    //成功
    $this->fullName = $domain.'/'.$file_name;
    $this->stateInfo = 'SUCCESS';
}else{
    //失败
    $this->stateInfo = $error;
}

再修改vendor/kucha/ueditor/UEditorAction.php的handleAction方法

            case 'uploadfile':
                $result = $this->actionUpload();
//                //处理返回的URL
//                if (substr($result['url'], 0, 1) != '/') {
//                    $result['url'] = '/' . $result['url'];
//                }
//                $result['url'] = Yii::getAlias('@web'.$result['url']);
                break;

注释以上代码

然后就可以了,ueditor中的图片就可以上传到七牛了,来张成功的例子hah

image.png

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.3

版权所有 | 转载请标明出处