这是一个在ThinkPHP5中实现上传文件到阿里云OSS的实例。
1.新建OSS用户
在阿里云RAM访问控制中新建一个用户和用户组,用户组权限设置为OSS可读写,并将用户加入用户组。新建用户时记得保存生成的accessKeyId和accessKeySecret。
2.创建Bucket
在OSS管理控制台添加一个Bucket并在Bucket授权策略中加入刚才创建的用户并赋予读写权限。
3.安装
在项目根目录运行:
1 |
composer require aliyuncs/oss-sdk-php |
4.创建controller文件
创建common/controller/Oss.php,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
namespace app\common\controller; use OSS\OssClient; use OSS\Core\OssException; class Oss { public static function Upload($fileUrl,$file){ // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。 $accessKeyId = "your accessKeyId"; $accessKeySecret = "your accessKeySecret"; // Endpoint以杭州为例,其它Region请按实际情况填写。 $endpoint = "http://oss-cn-chengdu.aliyuncs.com"; // 存储空间名称 $bucket= "bucket name"; // <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg $object = 'your path'.$fileUrl; $content = $file; try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->putObject($bucket, $object, $content); return true; } catch (OssException $e) { return false; } } } |
5.在其他controller中使用:
1 |
use app\common\controller\Oss; |
上传方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
public function uploadPublic(Request $request) { $uid = $this->_initialize()['id']; $file = $request->file('file'); if(!empty($file)) { // 我这里在本地服务器和oss各保存了一份,如果你只需要上传到oss,请修改这段代码 $info = $file ->validate(['size'=>1000000,'ext'=>'jpg,png,gif,mp3'])->rule('date') ->move(dirname(__FILE__,4) . '/public/uploads',true,false); if($info) { $fileUrl = '/uploads/'.str_replace('\\','/',$info->getSaveName()); $fileName = stripslashes($info->getFilename()); $fileExtension = stripslashes($info->getExtension()); $image_file = dirname(__FILE__,4).'/public'.$fileUrl; $image_data = fread(fopen($image_file, 'r'), filesize($image_file)); $ossRes = Oss::Upload($fileUrl,$image_data); if($ossRes==true) { $result=[ 'success'=> true, 'msg'=>'上传成功', 'obj'=>[ 'fileUrl'=>$fileUrl, 'fileName'=>$repeatFile['fileName'], 'fileType'=>$repeatFile['fileType'], ] ]; return json_encode($result); } else { $result=[ 'success'=> false, 'msg'=>'上传失败', ]; return json_encode($result); } } else { // 上传失败获取错误信息 $result=[ 'success'=> false, 'msg' => $file->getError(), ]; return json_encode($result); } unset($info); } else { $result=[ 'success'=> false, 'msg'=>'缺少文件', ]; return json_encode($result); } } |
文章评论 暂无评论
暂无评论