laravel使用阿里云oos教程
1947
2022-07-21

先用composer下载安装扩展包
composer require "johnlui/aliyun-oss"
安装完成之后的设置
在app目录下建立:App\services\OSS 目录<?php namespace App\services; use JohnLui\AliyunOSS; use Exception; use DateTime; class OSS { /* 城市名称: * * 经典网络下可选:杭州、上海、青岛、北京、张家口、深圳、香港、硅谷、弗吉尼亚、新加坡、悉尼、日本、法兰克福、迪拜 * VPC 网络下可选:杭州、上海、青岛、北京、张家口、深圳、硅谷、弗吉尼亚、新加坡、悉尼、日本、法兰克福、迪拜 */ private $city = '上海'; // 经典网络 or VPC private $networkType = '经典网络'; private $AccessKeyId = 'LTAI5tKXjorberceJii3UL2D'; private $AccessKeySecret = 'byiFFJGuy4sK5gNTjC0lZlhP5H85cD'; private $ossClient; /** * 私有初始化 API,非 API,不用关注 * @param boolean 是否使用内网 */ public function __construct($isInternal = false) { if ($this->networkType == 'VPC' && !$isInternal) { throw new Exception("VPC 网络下不提供外网上传、下载等功能"); } $this->ossClient = AliyunOSS::boot( $this->city, $this->networkType, $isInternal, $this->AccessKeyId, $this->AccessKeySecret ); } /** * 使用外网上传文件 * @param string bucket名称 * @param string 上传之后的 OSS object 名称 * @param string 上传文件路径 * @return boolean 上传是否成功 */ public static function publicUpload($bucketName, $ossKey, $filePath, $options = []) { $oss = new OSS(); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->uploadFile($ossKey, $filePath, $options); } /** * 使用阿里云内网上传文件 * @param string bucket名称 * @param string 上传之后的 OSS object 名称 * @param string 上传文件路径 * @return boolean 上传是否成功 */ public static function privateUpload($bucketName, $ossKey, $filePath, $options = []) { $oss = new OSS(true); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->uploadFile($ossKey, $filePath, $options); } /** * 使用外网直接上传变量内容 * @param string bucket名称 * @param string 上传之后的 OSS object 名称 * @param string 上传的变量 * @return boolean 上传是否成功 */ public static function publicUploadContent($bucketName, $ossKey, $content, $options = []) { $oss = new OSS(); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->uploadContent($ossKey, $content, $options); } /** * 使用阿里云内网直接上传变量内容 * @param string bucket名称 * @param string 上传之后的 OSS object 名称 * @param string 上传的变量 * @return boolean 上传是否成功 */ public static function privateUploadContent($bucketName, $ossKey, $content, $options = []) { $oss = new OSS(true); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->uploadContent($ossKey, $content, $options); } /** * 使用外网删除文件 * @param string bucket名称 * @param string 目标 OSS object 名称 * @return boolean 删除是否成功 */ public static function publicDeleteObject($bucketName, $ossKey) { $oss = new OSS(); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->deleteObject($bucketName, $ossKey); } /** * 使用阿里云内网删除文件 * @param string bucket名称 * @param string 目标 OSS object 名称 * @return boolean 删除是否成功 */ public static function privateDeleteObject($bucketName, $ossKey) { $oss = new OSS(true); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->deleteObject($bucketName, $ossKey); } # 下面不再分公网内网出 API,也不注释了,大家自行体会吧 public function copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey) { $oss = new OSS(); return $oss->ossClient->copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey); } public function moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey) { $oss = new OSS(); return $oss->ossClient->moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey); } // 获取公开文件的 URL public static function getPublicObjectURL($bucketName, $ossKey) { $oss = new OSS(); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->getPublicUrl($ossKey); } // 获取私有文件的URL,并设定过期时间,如 \DateTime('+1 day') public static function getPrivateObjectURLWithExpireTime($bucketName, $ossKey, DateTime $expire_time) { $oss = new OSS(); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->getUrl($ossKey, $expire_time); } public static function createBucket($bucketName) { $oss = new OSS(); return $oss->ossClient->createBucket($bucketName); } public static function getAllObjectKey($bucketName) { $oss = new OSS(); return $oss->ossClient->getAllObjectKey($bucketName); } public static function getObjectMeta($bucketName, $ossKey) { $oss = new OSS(); return $oss->ossClient->getObjectMeta($bucketName, $ossKey); } }
控制器使用代码
先在控制器引入OOSuse App\Services\OSS;
//上传图片 public function upload(Request $request){ if ($request->isMethod('post')){ $file = $request->file('file'); $allowed_extensions = ["png", "jpg","JPG","PNG","JPEG", "jpeg", "gif"]; if($file){ if(!$file->isValid()) { $result = array('msg' => '上传出错,请重试!', 'code'=>500); return response()->json($result); } if ($file->getClientOriginalExtension() && !in_array($file->getClientOriginalExtension(), $allowed_extensions)) { $result = array('msg' => '上传格式不对!', 'code'=>500); return response()->json($result); } $img_path = $file -> getRealPath(); // 获取临时图片绝对路径 $entension = $file -> getClientOriginalExtension(); // 上传文件后缀 $filename = date('YmdHis').mt_rand(100,999).'.'.$entension; // 重命名图片 $date = date('Y-m-d'); $filePath = 'uploads/images/'.$date.'/'.$filename; //上传到阿里云服务器 $res=OSS::publicUpload('tea-demo',$filePath, $img_path, ['ContentType'=>'image/jpeg']); if($res){ $result = array('msg' => '上传成功!', 'code'=>200,'path'=>$filePath); return response()->json($result); }else{ $result = array('msg' => '上传失败!', 'code'=>500); return response()->json($result); } }else{ $result = array('msg' => '文件不存在!', 'code'=>500); return response()->json($result); } } }
-
分享