web2.0時代;除了純信息展現類的網站;基本都是有文件上傳功能的;php
最不濟你得讓用戶換個頭像吧;可是隨着業務的發展;html
若是上傳的文件都和網站程序源代碼放在一塊兒;那是有至關多的弊端的;ios
1:靜態文件會佔用大量帶寬;git
2:服務器的成本略高;web
常規的作法是把php源代碼放到一臺服務器上;圖片等靜態文件放在另外一臺服務器上;thinkphp
當一個神奇的「雲」時代的到來後;一切就變的更加簡單了;服務器
在業務還比較小的時候;咱們無需大費周折的去搞一臺靜態文件服務器;直接使用第三方的便可;網絡
好了;洛裏囉嗦了半天;下面請出本篇博客的主角:阿里雲oss;框架
我就再也不安利oss的優點了;還沒了解過的先跟着這個連接走:https://www.aliyun.com/product/oss/ide
一:準備工做
1:申請key和secret
2:建立Bucket
須要注意的是要把讀寫權限改成: 公共讀;
根據服務器的位置獲取外網endpoint;https://help.aliyun.com/document_detail/31834.html
ok;湊齊了這些配置項;下面能夠召喚神龍了;
二:填寫配置項
依然是以項目示例:http://git.oschina.net/shuaibai123/thinkphp-bjyadmin
/Application/Common/Conf/config.php
'ALIOSS_CONFIG' => array( 'KEY_ID' => '', // 阿里雲oss key_id 'KEY_SECRET' => '', // 阿里雲oss key_secret 'END_POINT' => '', // 阿里雲oss endpoint 'BUCKET' => '' // bucken 名稱 ),
三:實例化並上傳
/Application/Common/Common/function.php
/** * 實例化阿里雲oos * @return object 實例化獲得的對象 */ function new_oss(){ vendor('Alioss.autoload'); $config=C('ALIOSS_CONFIG'); $oss=new \OSS\OssClient($config['KEY_ID'],$config['KEY_SECRET'],$config['END_POINT']); return $oss; } /** * 上傳文件到oss並刪除本地文件 * @param string $path 文件路徑 * @return bollear 是否上傳 */ function oss_upload($path){ // 獲取配置項 $bucket=C('ALIOSS_CONFIG.BUCKET'); // 先統一去除左側的.或者/ 再添加./ $oss_path=ltrim($path,'./'); $path='./'.$oss_path; if (file_exists($path)) { // 實例化oss類 $oss=new_oss(); // 上傳到oss $oss->uploadFile($bucket,$oss_path,$path); // 如需上傳到oss後 自動刪除本地的文件 則刪除下面的註釋 // unlink($path); return true; } return false; }
ok如今首先使用框架的Upload上傳類上傳文件到服務器;得到文件路徑;
調用oss_upload()函數;傳入得到的文件路徑;便可把文件上傳到oss;
四:便捷方式
看第三步;咱們能夠發現;每上傳一個文件就要調用oss_upload()函數;
那可不能夠上傳文件之後自動就上傳到oss呢?
固然能夠了;可是咱們要對框架的Upload作點手術;
在 /ThinkPHP/Library/Think/Upload.class.php 的第229行添加以下代碼;
//*************************添加部分開始************************* // 判斷是否上傳成功 if (!empty($info)) { // 獲取須要上傳到oss的目錄 $need_upload_oos=C('NEED_UPLOAD_OSS'); foreach ($info as $k => $v) { // 判斷此路徑是否須要上傳到oss foreach ($need_upload_oos as $m => $n) { if (strpos($v['savepath'], $n)!==false) { // 上傳到oss oss_upload($v['savepath'].$v['savename']); continue; } } } } //*************************添加部分結束*************************
而後在配置項中設置哪些目錄的文件自動上傳到oss;
/Application/Common/Conf/config.php
'NEED_UPLOAD_OSS' => array( // 須要上傳的目錄 '/Upload/avatar', '/Upload/cover', '/Upload/image/webuploader', '/Upload/video', ),
若是隻有個別目不上傳、或者是全部目錄都上傳的;直接改配置項和Upload便可;
四:獲取文件連接
圖片之類的靜態文件是上傳到oss了;那連接怎麼獲取呢?
/Application/Common/Common/function.php
/** * 獲取完整網絡鏈接 * @param string $path 文件路徑 * @return string http鏈接 */ function get_url($path){ // 若是是空;返回空 if (empty($path)) { return ''; } // 若是已經有http直接返回 if (strpos($path, 'http://')!==false) { return $path; } // 獲取bucket $bucket=C('ALIOSS_CONFIG.BUCKET'); return 'http://'.$bucket.'.oss-cn-beijing.aliyuncs.com'.$path; }
調用上面這個get_url()函數;傳入第三步獲取到的文件路徑;便可獲得oss的文件連接;
到此;從建立、上傳、獲取文件連接;整個流程就結束了;
若是要整合到本身有的項目中;
那隻須要把/ThinkPHP/Library/Vendor/Alioss文件夾拷貝到本身項目同目錄下;
把上面哪些配置項和函數拿過去就能夠直接用;
本文爲白俊遙原創文章,轉載無需和我聯繫,但請註明來自白俊遙博客http://baijunyao.com