【UEditor】遠程上傳圖片到【七牛雲存儲】

雜談:最近在玩一個第三方的微信開發平臺,裏面的圖片都是上傳到【七牛雲存儲】的,用了一下很是的好用,支持各類語言,SDK齊全。支持全分佈式系統架構以及存儲技術和數據加速,因而決定將網站的圖片都存儲到七牛上(以前存儲在本地服務器,不只耗費流量,並且佔空間,像我準備使用新浪雲SAE,沒有備案的話要消耗雙倍的雲豆,暈死)。若是和我同樣但願把你的圖片存儲到海量雲空間的朋友,請繼續往下看,高手請掠過·····。php

言歸正傳:這裏直接貼出修改好的代碼 和 操做步驟。想詳細研究的童鞋能夠登陸七牛的官網查看 http://developer.qiniu.com/docs/v6/index.htmlhtml

請自行下載:我使用的是php,其餘語言的原理相同,請參考七牛SDK自行修改。前端

1.百度UEditor編輯器:點擊下載 (版本:1.3.6 utf-8版)web

2.七牛SDK(php版本):點擊下載 (版本 :V6.1.9)apache

-----------------------------------------------------------------------------------windows

本地開發的話 數組

首先要開啓php擴展 php_curl 我使用的是WAMP 很方便 可自行找到php.ini文件 取消 php_curl 模塊以前的註釋七牛雲存儲

   

在測試七牛接口的時候報錯 Fatal error: Call to undefined function curl_init()
解決辦法:服務器

一、在php.ini中找到extension=php_curl.dll,去掉前面的,php.ini通常在c:\windows下面。

二、在php.ini中找到extension_dir = "ext",去掉前面的;,改成extension_dir = "C:\php5\ext""C:\php5\ext"只是示例,即擴展指向的路徑要對

三、php_curl.dll、libeay32.dll、ssleay32.dll、php5ts.dll都拷到system32下面去。重啓apache服務

步驟:微信

1.申請七牛空間 假設建立一個名稱爲abc的空間

    取得 域名:abc.qiniudn.com ,

    開發者平臺-->賬號設置 裏面取得:Ak SK 

2.解壓SDK將qiniu 文件夾copy到 ueditor\php\ 目錄下 如圖:

2.修改 ueditor.config.js

只須要修改一個地方找到 ,imagePath:"" 設置爲空串 由於前臺使用的都是七牛給的絕對路徑(URI) 不須要加本項目的修正前綴

仍是貼個圖吧

3.修改 Uploader.class.php

(1)給 $stateMap 數組添加一個元素:錯誤提示 爲了國際化採用了unicode編碼 (不須要提示錯誤這一步可省略)

//"QINIU" => "遠程上傳失敗"
'QINIU'=> '\u8fdc\u7a0b\u4e0a\u4f20\u5931\u8d25',

(2)修改 private function upFile( $base64 )

這裏貼出修改後的所有代碼,裏面的注視代碼請忽略,留下是爲了後續修改方便閱讀  (假設:倉庫名爲 abc)

/**
     * 上傳文件的主處理方法
     * @param $base64
     * @return mixed
     */
    private function upFile( $base64 )
    {
        //處理base64上傳
        if ( "base64" == $base64 ) {
            $content = $_POST[ $this->fileField ];
            $this->base64ToImage( $content );
            return;
        }

        //處理普通上傳
        $file = $this->file = $_FILES[ $this->fileField ];
        if ( !$file ) {
            $this->stateInfo = $this->getStateInfo( 'POST' );
            return;
        }
        if ( $this->file[ 'error' ] ) {
            $this->stateInfo = $this->getStateInfo( $file[ 'error' ] );
            return;
        }
        if ( !is_uploaded_file( $file[ 'tmp_name' ] ) ) {
            $this->stateInfo = $this->getStateInfo( "UNKNOWN" );
            return;
        }

        $this->oriName = $file[ 'name' ];
        $this->fileSize = $file[ 'size' ];
        $this->fileType = $this->getFileExt();

        if ( !$this->checkSize() ) {
            $this->stateInfo = $this->getStateInfo( "SIZE" );
            return;
        }
        if ( !$this->checkType() ) {
            $this->stateInfo = $this->getStateInfo( "TYPE" );
            return;
        }

        //上傳圖片到雲端 start
        require_once("qiniu/io.php");
        require_once("qiniu/rs.php");

        $bucket = "abc"; //倉庫名
        //截取原始文件後綴名
        $key1 = "Uploads/".time().mt_rand(10,99).$this->getFileExt();
        $accessKey = '填寫你的AK';
        $secretKey = '填寫你的SK';

        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, $key1, $file[ "tmp_name" ], $putExtra);

//成功返回$ret
  //array
  // 'hash' => string 'FsgE4pr0atgeRut7zwam2kw1-DSB' (length=28)
  // 'key' => string 'Uploads/139964935320' (length=20)

//失敗返回$err
// object(Qiniu_Error)[6]
//   public 'Err' => string 'no such bucket' (length=14)
//   public 'Reqid' => string 'hSsAAA2QUiTHjWwT' (length=16)
//   public 'Details' => string '' (length=0)
//   public 'Code' => int 631

        //不能隨便輸出 不然上傳進度條沒法完成
        // echo "====> Qiniu_PutFile result: \n";
        // if ($err !== null) {
        //     var_dump($err);
        // } else {
        //     var_dump($ret);
        // }
        //end

        //判斷保存是否成功

        //將完整的路徑返回給前端 img[src]
        // $this->fullName = $this->getFolder() . '/' . $this->getName();
        $this->fullName = "http://abc.qiniudn.com/".$key1;
        // if ( $this->stateInfo == $this->stateMap[ 0 ] ) {
        //     if ( !move_uploaded_file( $file[ "tmp_name" ] , $this->fullName ) ) {
        //         $this->stateInfo = $this->getStateInfo( "MOVE" );
        //     }
        // }
    }

這樣就大功告成了 ,很是的簡單。上面的代碼沒有判斷以前添加的錯誤碼 QINIU 須要可自行判斷。

成功會返回 $ret 數組

失敗會返回 $err 數組 

而且最後必定要將完整的文件路徑返回給前端:

$this->fullName = "http://abc.qiniudn.com/".$key1;

相關文章
相關標籤/搜索