物件儲存oss整合到thinkPHP,將圖片上傳到oss裡面
阿新 • • 發佈:2019-01-09
阿里雲的物件儲存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>