雜談:最近在玩一個第三方的微信開發平臺,裏面的圖片都是上傳到【七牛雲存儲】的,用了一下很是的好用,支持各類語言,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;