1.先用composer安装阿里云OSS的PHPSDK
2.配置文件里定义阿里云OSS的秘钥
3.在index控制器里的代码封装
<?php namespace app\index\controller; use OSS\OssClient; use OSS\Core\OssException; use OSS\Core\OssUtil; use think\Config; class Index extends Base { // 阿里OSS相关参数 protected $accessKeyId = \'\'; protected $accessKeySecret = \'\'; protected $endpoint = \'\'; protected $bucket = \'\'; // 文件上传相关设置 protected $image_size = 0; protected $video_size = 0; protected $other_size = 0; /** * 构造函数 */ public function _initialize() { $this->accessKeyId = Config::get(\'aliyun_oss\')[\'accessKeyId\']; $this->accessKeySecret = Config::get(\'aliyun_oss\')[\'accessKeySecret\']; $this->endpoint = Config::get(\'aliyun_oss\')[\'endpoint\']; $this->bucket = Config::get(\'aliyun_oss\')[\'bucket\']; $this->image_size = Config::get(\'upload_set\')[\'image_size\']; $this->video_size = Config::get(\'upload_set\')[\'video_size\']; $this->other_size = Config::get(\'upload_set\')[\'other_size\']; } /** * 测试页面 */ public function index() { return $this->fetch(); } /** * 创建存储空间 */ public function createBucket() { if (!request()->isPost()) { throw new \think\Exception(\'请求方式错误!\'); } $bucket = input(\'param.bucket\'); if (empty($bucket)) { return json([\'data\' => \'\', \'code\' => 1, \'message\' => \'存储空间名不能为空!\']); } try { $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint); $ossClient->createBucket($bucket); return json([\'data\' => \'\', \'code\' => 0, \'message\' => $bucket . \'存储空间创建成功\']); } catch (OssException $e) { return json([\'data\' => $e->getMessage(), \'code\' => 1, \'message\' => \'创建失败\']); } } /** * 上传文件 */ public function uploadFile() { /*判断提交方式*/ if (!request()->isPost()) { throw new \think\Exception(\'请求方式错误!\'); } /*获取到上传的文件*/ $file = $_FILES[\'file\']; if (!$file) { return json([\'data\' => \'\', \'code\' => 1, \'message\' => \'文件不存在!\']); } // 判断文件大小 if ($file[\'size\'] > $this->other_size) { return json([\'data\' => \'\', \'code\' => 1, \'message\' => \'文件大小不能超过\' . ($this->other_size / 1024 / 1024) . \'M\']); } $name = $file[\'name\']; $format = strrchr($name, \'.\');//截取文件后缀名如 (.jpg) /*判断图片格式*/ $allow_type = [\'.zip\', \'.rar\', \'.doc\',\'.docx\',\'xls\',\'xlsx\',\'mp3\',\'wav\']; if (!in_array($format, $allow_type)) { return json([\'data\' => \'\', \'code\' => 1, \'message\' => \'文件格式不在允许范围内\']); } // 尝试执行 try { //实例化对象 将配置传入 $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint); //这里是有sha1加密 生成文件名 之后连接上后缀 $fileName = \'upload/file/\' . date("Ymd") . \'/\' . sha1(date(\'YmdHis\', time()) . uniqid()) . $format; //执行阿里云上传 $result = $ossClient->uploadFile($this->bucket, $fileName, $file[\'tmp_name\']); /*组合返回数据*/ $arr = [ \'oss_url\' => $result[\'info\'][\'url\'], //上传资源地址 \'relative_path\' => $fileName //数据库保存名称(相对路径) ]; } catch (OssException $e) { return json([\'data\' => $e->getMessage(), \'code\' => 1, \'message\' => \'上传失败!\']); } //将结果返回 return json([\'data\' => array(\'file\' => $arr[\'oss_url\']), \'code\' => 0, \'message\' => \'成功上传到oss\']); } /** * 上传视频 */ public function uploadVideo() { /*判断提交方式*/ if (!request()->isPost()) { throw new \think\Exception(\'请求方式错误!\'); } /*获取到上传的文件*/ $file = $_FILES[\'file\']; if (!$file) { return json([\'data\' => \'\', \'code\' => 1, \'message\' => \'文件不存在!\']); } // 判断文件大小 if ($file[\'size\'] > $this->video_size) { return json([\'data\' => \'\', \'code\' => 1, \'message\' => \'视频大小不能超过\' . ($this->video_size / 1024 / 1024) . \'M\']); } $name = $file[\'name\']; $format = strrchr($name, \'.\');//截取文件后缀名如 (.jpg) /*判断图片格式*/ $allow_type = [\'.mp4\', \'.avi\', \'.rmvb\']; if (!in_array($format, $allow_type)) { return json([\'data\' => \'\', \'code\' => 1, \'message\' => \'视频格式不在允许范围内\']); } // 尝试执行 try { //实例化对象 将配置传入 $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint); //这里是有sha1加密 生成文件名 之后连接上后缀 $fileName = \'upload/video/\' . date("Ymd") . \'/\' . sha1(date(\'YmdHis\', time()) . uniqid()) . $format; //执行阿里云上传 $result = $ossClient->uploadFile($this->bucket, $fileName, $file[\'tmp_name\']); /*组合返回数据*/ $arr = [ \'oss_url\' => $result[\'info\'][\'url\'], //上传资源地址 \'relative_path\' => $fileName //数据库保存名称(相对路径) ]; } catch (OssException $e) { return json([\'data\' => $e->getMessage(), \'code\' => 1, \'message\' => \'上传失败!\']); } //将结果返回 return json([\'data\' => array(\'file\' => $arr[\'oss_url\']), \'code\' => 0, \'message\' => \'成功上传到oss\']); } /** * 上传图片 */ public function uploadImage() { /*判断提交方式*/ if (!request()->isPost()) { throw new \think\Exception(\'请求方式错误!\'); } /*获取到上传的文件*/ $file = $_FILES[\'file\']; if (!$file) { return json([\'data\' => \'\', \'code\' => 1, \'message\' => \'文件不存在!\']); } // 判断文件大小 if ($file[\'size\'] > $this->image_size) { return json([\'data\' => \'\', \'code\' => 1, \'message\' => \'视频大小不能超过\' . ($this->image_size / 1024 / 1024) . \'M\']); } $name = $file[\'name\']; $format = strrchr($name, \'.\');//截取文件后缀名如 (.jpg) /*判断图片格式*/ $allow_type = [\'.jpg\', \'.jpeg\', \'.gif\', \'.bmp\', \'.png\']; if (!in_array($format, $allow_type)) { return json([\'data\' => \'\', \'code\' => 1, \'message\' => \'图片格式不在允许范围内\']); } // 尝试执行 try { //实例化对象 将配置传入 $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint); //这里是有sha1加密 生成文件名 之后连接上后缀 $fileName = \'upload/image/\' . date("Ymd") . \'/\' . sha1(date(\'YmdHis\', time()) . uniqid()) . $format; //执行阿里云上传 $result = $ossClient->uploadFile($this->bucket, $fileName, $file[\'tmp_name\']); /*组合返回数据*/ $arr = [ \'oss_url\' => $result[\'info\'][\'url\'], //上传资源地址 \'relative_path\' => $fileName //数据库保存名称(相对路径) ]; } catch (OssException $e) { return json([\'data\' => $e->getMessage(), \'code\' => 1, \'message\' => \'上传失败!\']); } //将结果返回 return json([\'data\' => array(\'file\' => $arr[\'oss_url\']), \'code\' => 0, \'message\' => \'成功上传到oss\']); } /** * 上传图片base64 */ public function uploadImageBase64() { // 判断提交方式及图片类型 if (!request()->has(\'base64\', \'post\')) { return json([\'data\' => \'\', \'code\' => 1, \'message\' => \'请求方式错误,或图片非base64格式类型\']); } $data = $_POST[\'base64\']; $result = $this->new_base64_upload($data); if ($result[\'code\'] !== 200) { return json([\'data\' => \'\', \'code\' => 1, \'message\' => $result[\'msg\']]); } $fileResult = &$result[\'data\']; $filePath = $fileResult[\'path\'] . $fileResult[\'name\']; $ossFileName = implode(\'/\', [\'upload/image\', date(\'Ymd\'), $fileResult[\'name\']]); try { //实例化对象 将配置传入 $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint); $result = $ossClient->uploadFile($this->bucket, $ossFileName, $filePath); $arr = [ \'oss_url\' => $result[\'info\'][\'url\'], //上传资源地址 \'relative_path\' => $ossFileName //数据库保存名称(相对路径) ]; } catch (OssException $e) { return json([\'data\' => $e->getMessage(), \'code\' => 1, \'message\' => \'上传失败\']); } unlink($filePath); return json([\'data\' => array(\'file\' => $arr[\'oss_url\']), \'code\' => 0, \'message\' => \'成功上传到oss\']); } /** * 将Base64数据转换成二进制并存储到指定路径 */ protected function new_base64_upload($base64, $image_path = \'upload/posts/\') { $data = explode(\',\', $base64); trace($data, \'api\'); unset($base64); if (count($data) !== 2) { return [\'code\' => 400, \'msg\' => \'文件格式错误\']; } if (!preg_match(\'/^(data:\s*image\/(\w+);base64)/\', $data[0], $result)) { return [\'code\' => 400, \'msg\' => \'文件格式错误\']; } $type = $result[2]; if (!in_array($type, array(\'jpeg\', \'jpg\', \'gif\', \'bmp\', \'png\'))) { return [\'code\' => 400, \'msg\' => \'文件格式不在允许范围内\']; } $image_name = md5(uniqid()) . \'.\' . $result[2]; $image_file = $image_path . $image_name; //服务器文件存储路径 try { if (file_put_contents($image_file, base64_decode($data[1]))) { return [\'code\' => 200, \'msg\' => \'成功\', \'data\' => [\'name\' => $image_name, \'path\' => $image_path]]; } else { return [\'code\' => 400, \'msg\' => \'文件保存失败\']; } } catch (\Exception $e) { $msg = $e->getMessage(); return [\'code\' => 400, \'msg\' => $msg]; } } }