简介
阿里云对象存储服务(Object Storage Service,简称 OSS)为您提供基于网络的数据存取服务。使用 OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种非结构化数据文件。
初次使用阿里云 OSS,请您先了解阿里云 OSS 常见问题 和 阿里云 OSS 使用限制。
阿里云 OSS 将数据文件以对象(Object)的形式上传到存储空间(Bucket)中。您可以进行以下操作:
- 创建一个或者多个存储空间,向每个存储空间中添加一个或多个文件。
- 通过获取已上传文件的地址进行文件的分享和下载。
- 通过修改存储空间或文件的读写权限(ACL)来设置访问权限。
- 通过阿里云管理控制台、各种便捷工具以及丰富的 SDK 包执行基本和高级 OSS 操作。
使用阿里云管理控制台来完成 OSS 基本操作的流程如下:
官方文档:https://help.aliyun.com/document_detail/32101.html
sdk 安装
composer require aliyuncs/oss-sdk-php
自定义封装的类
<?php
namespace app\common\ali_oss;
//引入依赖
use OSS\Core\OssException;
use OSS\OssClient;
//require __DIR__ . '/../../../../thinkphp/vendor/autoload.php';
class Oss{
// 阿里云主账号AccessKey拥有所有API的访问权限
private static $accessKeyId = 'xxx';
private static $accessSecret = 'xxxx';
// Endpoint以杭州为例,其它Region请按实际情况填写。
private static $endpoint = "http://oss-cn-shanghai.aliyuncs.com";
// 存储空间名称
private static $bucket = "xxx";
//oss 客户端实例
private static $ossClient = null;
private function __construct() {}
/**
* 获取ossClient实例
*/
public static function getOssClient(){
if(Oss::$ossClient === null){
Oss::$ossClient = new OssClient(Oss::$accessKeyId, Oss::$accessSecret, Oss::$endpoint);
return Oss::$ossClient;
}
return Oss::$ossClient;
}
/**
* @param $bucket 存储空间名称
*/
public static function isBucket($bucket){
try {
$res = Oss::getOssClient()->doesBucketExist($bucket);
} catch (OssException $e) {
/*printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");*/
return false;
}
if($res === true) {
return true;
}
return false;
}
/**
* @param $objectName 上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg
* @param $filePath 由本地文件路径加文件名包括后缀组成,例如/users/local/myfile.txt
*/
public static function uploadFile($objectName, $filePath ){
try{
//检测存储空间是否存在
if(!Oss::isBucket(Oss::$bucket)){
echo 'oss存储空间地址有误或不存在';
return false;
}
Oss::getOssClient()->uploadFile(Oss::$bucket, $objectName, $filePath);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return false;
}
return true;
}
/**
* 判断该路径在oss上是否存在
* @param $objectName oss文件路径,例:abc/efg/123.jpg
*/
public static function isEmptyFileOss($objectName){
try{
$exist = Oss::getOssClient()->doesObjectExist(Oss::$bucket, '13246');
} catch(OssException $e) {
/* printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");*/
return false;
}
/*print(__FUNCTION__ . ": OK" . "\n");*/
return true;
}
/**
* @param $objectName 要删除的oss文件路径,例:abc/efg/123.jpg
*/
public static function deleteFile($objectName){
try{
//检测存储空间是否存在
if(!Oss::isBucket(Oss::$bucket)){
/*echo 'oss存储空间地址有误或不存在';*/
return false;
}
Oss::getOssClient()->deleteObject(Oss::$bucket, $objectName);
} catch(OssException $e) {
/* printf($e->getMessage() . "\n");*/
return false;
}
return true;
}
}
调用自定义封装的类使用Demo
//判断oss上传是否成功
if(Oss::uploadFile($url, $filePath) != true){
return false;
}