對象存儲oss集成到thinkPHP,將圖片上傳到oss裏面

阿里雲的對象存儲oss,相似七牛存儲。 前幾天有客戶須要把圖片放在阿里雲的oss裏面,百度過一些資料,好像都是oss比較舊的版本1.幾的,如今上傳一個比較新的oss版本v2.0.5,並集成到thinkPHP裏面。php

能夠在阿里雲網站下載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>
相關文章
相關標籤/搜索