阿里云对象存储OSS基本使用

简介

阿里云对象存储服务(Object Storage Service,简称 OSS)为您提供基于网络的数据存取服务。使用 OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种非结构化数据文件。

初次使用阿里云 OSS,请您先了解阿里云 OSS 常见问题阿里云 OSS 使用限制

阿里云 OSS 将数据文件以对象(Object)的形式上传到存储空间(Bucket)中。您可以进行以下操作:

  • 创建一个或者多个存储空间,向每个存储空间中添加一个或多个文件。
  • 通过获取已上传文件的地址进行文件的分享和下载。
  • 通过修改存储空间或文件的读写权限(ACL)来设置访问权限。
  • 通过阿里云管理控制台、各种便捷工具以及丰富的 SDK 包执行基本和高级 OSS 操作。

使用阿里云管理控制台来完成 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;
}
上一篇:QtObject使用


下一篇:【性能优化】小伙伴问我性能指标监控怎么做,这次我安排上了!!