用百度的Ueditor上傳圖片默認保存到本地,在分佈式系統中使用很是不方便,通常須要上傳到七牛,阿里雲的oss上php
須要七牛sdk 6.1.9(支持php5.2,高版本可自行改正)json
Ueditor 1.4.3分佈式
主要原理:百度ueditor上傳文件時會建立本地文件,並返回文件路徑 $this->fullName,咱們須要修改上傳類,在上傳成功時進行文件的轉存,轉存成功後把本地的文件刪除,該方法能夠處理圖片,附件等小文件,大文件不建議在ueditor上上傳。ui
分享地址:http://pan.baidu.com/s/1o8noPdg ;歡迎你們下載和共同研究this
提供修改方式:(oss只要修改配置文件和上傳方法就行^_^)阿里雲
1.七牛官網下載sdk6.1.9,放在php的文件夾下編碼
2.在ueditor/php下qiniu_config.phpcode
return array( "bucket"=>"***", "accessKey"=>"****", "secretKey"=>"****" );
3.修改php下的config.json,把圖片訪問的前綴改爲相應的遠程訪問的前綴圖片
"scrawlUrlPrefix": "http://******.com2.z0.glb.clouddn.com/", /* 圖片訪問路徑前綴 */
4.修改主要的上傳文件Uploader.class.php,將upFile方法改爲以下方法get
/** * 上傳到七牛 * @return mixed */ private function upFile() { $file = $this->file = $_FILES[$this->fileField]; if (!$file) { $this->stateInfo = $this->getStateInfo("ERROR_FILE_NOT_FOUND"); return; } if ($this->file['error']) { $this->stateInfo = $this->getStateInfo($file['error']); return; } else if (!file_exists($file['tmp_name'])) { $this->stateInfo = $this->getStateInfo("ERROR_TMP_FILE_NOT_FOUND"); return; } else if (!is_uploaded_file($file['tmp_name'])) { $this->stateInfo = $this->getStateInfo("ERROR_TMPFILE"); return; } $this->oriName = $file['name']; $this->fileSize = $file['size']; $this->fileType = $this->getFileExt(); $this->fullName = $this->getFullName(); $this->filePath = $this->getFilePath(); $this->fileName = $this->getFileName(); $dirname = dirname($this->filePath); //檢查文件大小是否超出限制 if (!$this->checkSize()) { $this->stateInfo = $this->getStateInfo("ERROR_SIZE_EXCEED"); return; } //檢查是否不容許的文件格式 if (!$this->checkType()) { $this->stateInfo = $this->getStateInfo("ERROR_TYPE_NOT_ALLOWED"); return; } //建立目錄失敗 if (!file_exists($dirname) && !mkdir($dirname, 0777, true)) { $this->stateInfo = $this->getStateInfo("ERROR_CREATE_DIR"); return; } else if (!is_writeable($dirname)) { $this->stateInfo = $this->getStateInfo("ERROR_DIR_NOT_WRITEABLE"); return; } //移動文件 if (!(move_uploaded_file($file["tmp_name"], $this->filePath) && file_exists($this->filePath))) { //移動失敗 $this->stateInfo = $this->getStateInfo("ERROR_FILE_MOVE"); } else { //移動成功 //執行到這裏,表明已經完成了上傳,此時系統會提示上傳成功 //------------------------------------------------ start --------------------------------------------------------- //上傳到七牛 require_once("qiniu/io.php"); require_once("qiniu/rs.php"); $config = require_once("qiniu_config.php"); $bucket = $config['bucket']; //倉庫名 //截取原始文件後綴名 //$key1 = "Uploads/".time().mt_rand(10,99).$this->getFileExt(); $accessKey = $config['accessKey']; $secretKey = $config['secretKey']; Qiniu_SetKeys($accessKey, $secretKey); $putPolicy = new Qiniu_RS_PutPolicy($bucket); $upToken = $putPolicy->Token(null); $putExtra = new Qiniu_PutExtra(); $putExtra->Crc32 = 1; //$file[ "tmp_name" ] ueditor上傳的臨時文件路徑 list($ret, $err) = Qiniu_PutFile($upToken,$this->fullName,$_SERVER['DOCUMENT_ROOT']."/".$this->fullName, $putExtra); //成功了,刪除本地文件 if($ret) { @unlink($_SERVER['DOCUMENT_ROOT']."/".$this->fullName); //file_put_contents("./log/log.txt","\ntime:".time()." ".json_encode($ret)."\n",FILE_APPEND); } if($err) { if(!is_dir("./log")){ if(!mkdir("log",0755,true)){ die("當前目錄沒有寫權限"); } } file_put_contents("./log/log.txt","\ntime:".time()." ".json_encode($_SERVER['DOCUMENT_ROOT']."/".$this->fullName)."\n",FILE_APPEND); $this->stateInfo = $this->getStateInfo("QINIU_ERR"); }else{ $this->stateInfo = $this->stateMap[0]; } //------------------------------------------------- end --------------------------------------------------------- } }
5.修改upBase64方法(若是不用截屏和塗鴉能夠不改)
/** * 處理base64編碼的圖片上傳 * @return mixed */ private function upBase64() { $base64Data = $_POST[$this->fileField]; $img = base64_decode($base64Data); $this->oriName = $this->config['oriName']; $this->fileSize = strlen($img); $this->fileType = $this->getFileExt(); $this->fullName = $this->getFullName(); $this->filePath = $this->getFilePath(); $this->fileName = $this->getFileName(); $dirname = dirname($this->filePath); //檢查文件大小是否超出限制 if (!$this->checkSize()) { $this->stateInfo = $this->getStateInfo("ERROR_SIZE_EXCEED"); return; } //建立目錄失敗 if (!file_exists($dirname) && !mkdir($dirname, 0777, true)) { $this->stateInfo = $this->getStateInfo("ERROR_CREATE_DIR"); return; } else if (!is_writeable($dirname)) { $this->stateInfo = $this->getStateInfo("ERROR_DIR_NOT_WRITEABLE"); return; } //移動文件 if (!(file_put_contents($this->filePath, $img) && file_exists($this->filePath))) { //移動失敗 $this->stateInfo = $this->getStateInfo("ERROR_WRITE_CONTENT"); } else { //移動成功 require_once("qiniu/io.php"); require_once("qiniu/rs.php"); $config = require_once("qiniu_config.php"); $bucket = $config['bucket']; //倉庫名 //截取原始文件後綴名 //$key1 = "Uploads/".time().mt_rand(10,99).$this->getFileExt(); $accessKey = $config['accessKey']; $secretKey = $config['secretKey']; Qiniu_SetKeys($accessKey, $secretKey); $putPolicy = new Qiniu_RS_PutPolicy($bucket); $upToken = $putPolicy->Token(null); $putExtra = new Qiniu_PutExtra(); $putExtra->Crc32 = 1; //$file[ "tmp_name" ] ueditor上傳的臨時文件路徑 list($ret, $err) = Qiniu_PutFile($upToken,$this->fullName,$_SERVER['DOCUMENT_ROOT']."/".$this->fullName, $putExtra); if($ret) { //刪臨時文件 @unlink($_SERVER['DOCUMENT_ROOT']."/".$this->fullName); // file_put_contents("./log/log.txt","\ntime:".time()." ".json_encode($ret)."\n",FILE_APPEND); } if($err) { file_put_contents("./log/log.txt","\ntime:".time()." ERR:".json_encode($err)." ".json_encode($_SERVER['DOCUMENT_ROOT']."/".$this->fullName)."\n",FILE_APPEND); // $this->stateInfo = $this->getStateInfo("QINIU_ERR"); } $this->stateInfo = $this->stateMap[0]; } }