第一步,先用composer更新阿里云oss得sdk下来
composer require aliyuncs/oss-sdk-php
第二步,添加oss得配置文件
'aliyun_oss' => [ 'KeyId' => '', //您的Access Key ID 'KeySecret' => '', //您的Access Key Secret 'Endpoint' => '', //阿里云oss 外网地址endpoint 'Bucket' => '', //Bucket名称 ],
第三步,就可以直接编写主要代码了。 因为上传功能都是常用的。建议可以放在base下面或者写一个公共方法 。
/** * 实例化阿里云OSS * @return object 实例化得到的对象 * @return 此步作为共用对象,可提供给多个模块统一调用 */ function new_oss(){ //获取配置项,并赋值给对象$config $config=config('aliyun_oss'); //实例化OSS $oss=new \OSS\OssClient($config['KeyId'],$config['KeySecret'],$config['Endpoint']); return $oss; } /** * 上传指定的本地文件内容 * * @param OssClient $ossClient OSSClient实例 * @param string $bucket 存储空间名称 * @param string $object 上传的文件名称 * @param string $Path 本地文件路径 * @return null */ function uploadFile($bucket,$object,$Path){ //try 要执行的代码,如果代码执行过程中某一条语句发生异常,则程序直接跳转到CATCH块中,由$e收集错误信息和显示 try{ //没忘吧,new_oss()是我们上一步所写的自定义函数 $ossClient =$this->new_oss(); //uploadFile的上传方法 $res= $ossClient->uploadFile($bucket, $object, $Path); return json($res); } catch(OssException $e) { //如果出错这里返回报错信息 return $e->getMessage(); } }
最后一步,调用 当用到上传文件的时候就可以调用了。我直接拿thinkphp的上传方法过来了。调用的时候很简单 里面传三个参数 一个就是bucket的名称。 我的是gtjj 有需要也可以动态配置。第二个就是文件名字。 第三个就是文件路径
public function upload() { // 获取表单上传文件 例如上传了001.jpg $file = request()->file('file'); // 移动到框架应用根目录/uploads/ 目录下 $info = $file->move('./uploads'); if ($info) { $path = $info->getSaveName(); $filepath = 'https://qz.10huisp.com/uploads/' . $info->getSaveName(); $fileName = 'uploads/' . $info->getSaveName(); $this->uploadFile('gtjj', $fileName, $info->getPathname()); return $path; } else { // 上传失败获取错误信息 echo $file->getError(); } return json($file); }
待完善,有问题请留言