百度的Ueditor上傳到七牛,oss等第三方存儲的通用方法(php版)

用百度的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];
    }

}
相關文章
相關標籤/搜索