雜談:最近在玩一個第三方的微信開發平臺,裡面的圖片都是上傳到【七牛雲端儲存】的,用了一下非常的好用,支援各種語言,SDK齊全。支援全分散式系統架構以及儲存技術和資料加速,於是決定將網站的圖片都儲存到七牛上(之前儲存在本地伺服器,不僅耗費流量,而且佔空間,像我準備使用新浪雲SAE,沒有備案的話要消耗雙倍的雲豆,暈死)。如果和我一樣希望把你的圖片儲存到海量雲空間的朋友,請繼續往下看,高手請掠過·····。

言歸正傳:這裡直接貼出修改好的程式碼 和 操作步驟。想詳細研究的童鞋可以登入七牛的官網檢視 http://developer.qiniu.com/docs/v6/index.html

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

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

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

-----------------------------------------------------------------------------------

本地開發的話

首先要開啟php擴充套件 php_curl 我使用的是WAMP 很方便 可自行找到php.ini檔案 取消 php_curl 模組之前的註釋

   

在測試七牛介面的時候報錯 Fatal error: Call to undefined function curl_init()
解決辦法:

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

2、在php.ini中找到extension_dir = "ext",去掉前面的;,改為extension_dir = "C:\php5\ext"。
"C:\php5\ext"只是示例,即擴充套件指向的路徑要對 3、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;