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

薄洪涛6年前PHP1576

某个项目要做一个文章模块,用到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

相关文章

Yii2.0引入Ueditor

Yii2.0 引入Ueditor流程和其他框架不同必须引入Ueditor for Yii2.0,否则不能正常使用1,composer下载 composer require ...

Yii2.0行为Behavior的理解

Yii2.0行为Behavior的理解

在说什么叫行为之前,觉得说下行为的作用比较好;使用行为(behavior)可以在不修改现有类的情况下,对类的功能进行扩充。通过将行为绑定到一个类,可以使得类具有行为本身所具有的属性和方法;在设计原则中...

Yii2.0搭建接口模块教程

Yii2.0搭建接口模块教程

最近我需要做一个大项目中的一个模块,考虑用前后端分离,所以想自己搭建一套基于Yii2.0的restful接口出来,本来的时候老大想让我用spring boot,无奈我太菜只会php.....教程开始:...

Yii2.0中事件的使用及理解

Yii2.0中事件的使用及理解

    Yii 三大特性:属性,事件,行为;这篇文章咱们讲讲Yii事件;    事件是代码解耦的一种方式,设计业务流程的...

Yii2.0认证及限流

Yii2.0认证及限流

上次搭建了Yii2.0的接口框架后,现在开始搭建认证和限流模块,先说下这两个模块的作用认证:前后端分离,每次请求都是无状态的,及每一次请求服务器不知道你是谁,你有没有登陆;我们就需要做一个认证模块去识...

Yii2.0框架ActiveForm总结

首先引入ActiveForm和Html这里两个是很重要的<?php     use yii\bootstrap\ActiveForm; &nbs...

发表评论    

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