bulibuqiyaoyao 2016-11-30 08:37 采纳率: 0%
浏览 3585

今天看到一个帖子,把对象存储oss集成到thinkPHP,将图片上传到oss里面

图片说明

可以在阿里云网站下载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

演示链接如下:http://www.erdangjiade.com/js/875.html

  • 写回答

1条回答

  • dabocaiqq 2016-12-31 10:20
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。