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