1. 程式人生 > >物件儲存oss整合到thinkPHP,將圖片上傳到oss裡面

物件儲存oss整合到thinkPHP,將圖片上傳到oss裡面

阿里雲的物件儲存oss,類似七牛儲存。 前幾天有客戶需要把圖片放在阿里雲的oss裡面,百度過一些資料,好像都是oss比較舊的版本1.幾的,現在上傳一個比較新的oss版本v2.0.5,並整合到thinkPHP裡面。

可以在阿里雲網站下載oss的demo原始碼PHP版:v2.0.5 
https://help.aliyun.com/document_detail/32174.html?spm=5176.doc44688.6.375.MwiLwn 
不過,阿里雲的這個demo,用的是名稱空間(名稱空間具體功能我也沒搞懂,各位自行百度,高手請路過),如要整合到thinkPHP裡面需要修改下相關檔案和名稱空間,我已經整理好了。
第一步:將oss引入到tp框架裡面,路徑為:  
Thinkphp-->Library-->Org,將OSS資料夾放在org裡面。
第二步:公共配置檔案裡面  
    //oss配置 
    "OSS_ACCESS_ID" => '', 
    "OSS_ACCESS_KEY"=> '', 
    "OSS_ENDPOINT"  => '', 
    "OSS_TEST_BUCKET" => '', 
    "OSS_WEB_SITE" =>'',    //上面4個就不用介紹了,這個OSS_WEB_SITE是oss的bucket建立後的外網訪問地址,如需二級域名,可以指向二級域名,具體可以參考阿里雲控制檯裡面的oss  
     
    //oss檔案上傳配置 
    'oss_maxSize'=>1048576,    //1M 
    'oss_exts'   =>array(// 設定附件上傳型別    
                    'image/jpg',  
                    'image/gif',  
                    'image/png',  
                    'image/jpeg', 
                    'application/octet-stream',//阿里雲好像都是通過二進位制上傳,似乎上面4個字尾設定起到什麼用?  
                ),
第三步:公共function裡面  
// 返回json 
function backJson($code,$info){ 
    $arr['status']=$code; 
    $arr['info']=$info; 
    print_r(json_encode($arr)); 
    exit; 
} 
 
//oss上傳 
/* 
 *$fFiles:檔案域 
 *$n:上傳的路徑目錄 
 *$ossClient   
 *$bucketName 
 *$web:oss訪問地址 
 *$isThumb:是否縮圖 
 */ 
function ossUpPic($fFiles,$n,$ossClient,$bucketName,$web,$isThumb=0){ 
    $fType=$fFiles['type']; 
    $back=array( 
        'code'=>0, 
        'msg'=>'', 
    ); 
    if(!in_array($fType, C('oss_exts'))){ 
        $back['msg']='檔案格式不正確'; 
        return $back; 
        exit; 
    } 
    $fSize=$fFiles['size']; 
    if($fSize>C('oss_maxSize')){ 
        $back['msg']='檔案超過了1M'; 
        return $back; 
        exit; 
    } 
     
    $fname=$fFiles['name']; 
    $ext=substr($fname,stripos($fname,'.')); 
     
    $fup_n=$fFiles['tmp_name']; 
    $file_n=time().'_'.rand(100,999); 
    $object = $n."/".$file_n.$ext;//目標檔名 
     
 
    if (is_null($ossClient)) exit(1);     
    $ossClient->uploadFile($bucketName, $object, $fup_n); 
    if($isThumb==1){ 
        // 圖片縮放,參考https://help.aliyun.com/document_detail/44688.html?spm=5176.doc32174.6.481.RScf0S  
        $back['thumb']= $web.$object."?x-oss-process=image/resize,h_300,w_300"; 
    }     
    $back['code']=1; 
    $back['msg']=$web.$object; 
    return $back; 
    exit;     
}
第四步:控制器裡的操作方法裡面,例如控制器是Index,   
public function upPic(){  
    //oss上傳 
    $bucketName = C('OSS_TEST_BUCKET'); 
    $ossClient = new \Org\OSS\OssClient(C('OSS_ACCESS_ID'), C('OSS_ACCESS_KEY'), C('OSS_ENDPOINT'), false); 
    $web=C('OSS_WEB_SITE'); 
    //圖片  
    $fFiles=$_FILES['pic_1']; 
    $rs=ossUpPic($fFiles,'s',$ossClient,$bucketName,$web,0);  
    if($rs['code']==1){ 
        //圖片  
        $img = $rs['msg']; 
        //如返回裡面有縮圖: 
        $thumb=$rs['thumb'];             
    }else{ 
        $this->error('圖片有誤:'.$rs['msg']); 
        return; 
    }  
}
第五步:呼叫,檔案域名pic_1,要與第四步裡面的$_FILES['pic_1']一致。action地址為控制器的操作地址,例如:/index.php/Home/Index/upPic  
<meta charset="UTF-8"/>  
<form action="/index.php/Home/Index/upPic" enctype="multipart/form-data" method="post">  
    <input type="file" name="pic_1" value="" />  
    <input type="submit" value="上傳"/>  
</form>