首页 > 编程 > PHP > 正文

thinkPHP实现对象存储oss,将图片上传到阿里云oss

2019-11-08 03:23:14
字体:
来源:转载
供稿:网友
演示效果和下载地址:http://www.erdangjiade.com/js/1021.html可以在阿里云网站下载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>复制代码演示效果和下载地址:http://www.erdangjiade.com/js/1021.html
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表