目录
1.使用composer安装依赖
composer require aliyuncs/oss-sdk-php
目录结构如下:
2.编写代码
<?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 '';
}
}
}
3.调用
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);
4.遇到问题
(1) 上传成功 访问发现没有权限
提示:AccessDenied You have no right to access this object because of bucket acl.
解决 修改权限
(2) 接着访问,发现直接下载
解决:
配置自定义域名解析
在访问后,问题解决
(3) 上传文件 发现文件内容是空
额 原来是用了字符串上传方式 “putObject”
换成文件上传方式“uploadFile”后解决
5.自定义域名上传文件
(1) 配置:
参考上面自定义域名解析
(2) 代码修改
如下:
// 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);
}
最后,上传完成。