阿里雲的對象存儲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>