目录
composer require aliyuncs/oss-sdk-php
目录结构如下:
- /*
- * 阿里云oss对象文件存储
- */
-
- require_once __DIR__ . '/vendor/autoload.php';
-
- use OSS\OssClient;
- use OSS\Core\OssException;
-
- class OssHandle
- {
- // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录https://ram.console.aliyun.com创建RAM账号。
- private static $accessKeyId = "你的AccessKey";
-
- private static $accessKeySecret = "你的 AccessKeySecret";
-
- // Endpoint按实际情况填写
- private static $endpoint = "你的bucket外网域名";
-
- protected static $client;
-
- public function __construct()
- {
- self::$client = $this->getOssClient();
- }
-
- /**
- * 设置Oss client
- * @return OssClient|string
- */
- protected function getOssClient()
- {
- try {
- return new OssClient(self::$accessKeyId, self::$accessKeySecret, self::$endpoint);
- } catch (OssException $e) {
- print_r($e->getMessage());
- return '';
- }
- }
-
- /**
- * 创建bucket
- * @param $bucketName
- * @return null
- */
- public function createBucket($bucketName)
- {
- return self::$client->createBucket($bucketName);
- }
-
- /**
- * 上传文件到oss
- * @param $bucketName
- * @param $fileName :文件夹及文件名称
- * @param $local_file :本地文件路径
- * @return null
- */
- public function uploadOssFile($bucketName, $fileName, $local_file)
- {
- // $fileName 表示上传文件到OSS时需要指定包含文件后缀,不包含Bucket名称在内的完整路径,例如abc/efg/123.jpg。
- try {
- return self::$client->uploadFile($bucketName, $fileName, $local_file);
- } catch (OssException $e) {
- print_r($e->getMessage());
- return '';
- }
- }
-
- /**
- * 删除oss文件
- * @param $bucketName
- * @param $fileName
- * @return string|null
- */
- public function delOssFile($bucketName, $fileName)
- {
- // $fileName 表示删除OSS文件时需要指定包含文件后缀,不包含Bucket名称在内的完整路径,例如abc/efg/123.jpg
- try {
- return self::$client->deleteObject($bucketName, $fileName);
- } catch (OssException $e) {
- print_r($e->getMessage());
- return '';
- }
- }
- }
- require_once 'OssHandle.php';
-
- $obj = new OssHandle();
- // fileName 除bucket名称外 包含文件路径(文件夹)和文件名称
- // local_file 绝对地址 或相对地址
- $info = $obj->uploadOssFile('你的bucket', 'uploads/other/1.jpg', '../images/1.jpg');
- print_r($info);
-
- // fileName 除bucket名称外 包含文件路径(文件夹)和文件名称
- $bool = $obj->delOssFile('你的bucket', 'uploads/other/2.jpg');
- print_r($bool);
提示:AccessDenied You have no right to access this object because of bucket acl.
解决 修改权限
解决:
配置自定义域名解析
在访问后,问题解决
额 原来是用了字符串上传方式 “putObject”
换成文件上传方式“uploadFile”后解决
参考上面自定义域名解析
如下:
- // Endpoint按实际情况填写
- private static $endpoint = "http://oss.solveset.net";
- //private static $endpoint = "http://oss-cn-beijing.aliyuncs.com";
-
- /**
- * 设置Oss client
- * @return OssClient|array
- */
- protected function getOssClient()
- {
- # true为开启CNAME。CNAME是指将自定义域名绑定到存储空间上
- return new OssClient(self::$accessKeyId, self::$accessKeySecret, self::$endpoint, true);
- }
最后,上传完成。