对象存储BOS

    Bucket管理

    新建Bucket

    • 基本流程

      1. 创建一个BOSClient类的实例。
      2. 调用BOSClient.CreateBucket()方法。您需要提供Bucket的名字,即<Bucketname>
    • 示例代码
    public void CreateBucket(BosClient client, string bucketName)
    {
        // 新建一个Bucket
        client.CreateBucket(bucketName); 
    }                            
    > **注意:**由于Bucket的名称在所有区域中是唯一的,所以需要保证bucketName不与其他所有区域上的Bucket名称相同。

    查看Bucket列表

    • 基本流程

      1. 创建一个BOSClient类的实例。
      2. 调用BOSClient.ListBuckets()方法获取Bucket列表。
      3. 遍历Bucket列表并查看相关信息。
    • 示例代码
    public void ListBuckets(BosClient client)
    {
    
        // 获取用户的Bucket列表
        List<BucketSummary> buckets = client.ListBuckets().Buckets;
    
        // 遍历Bucket
        foreach (BucketSummary bucket in buckets)
        {
            Console.WriteLine(bucket.Name);
        }
    
    }
    请参考[完整示例](#完整示例)。

    判断Bucket是否存在

    • 基本流程

      1. 创建一个BOSClient类的实例。
      2. 调用BOSClient.DoesBucketExist()方法获取结果。
    • 示例代码

      若用户需要判断某个Bucket是否存在,则如下代码可以做到:

    public void DoesBucketExist(BosClient client, string bucketName)
    {
    
        // 获取Bucket的存在信息
        bool exists = client.DoesBucketExist(bucketName); //指定Bucket名称
    
        // 输出结果
        if (exists)
        {
            Console.WriteLine("Bucket exists");
        }
        else
        {
            Console.WriteLine("Bucket not exists");
        }
    }

    删除Bucket

    • 基本流程

      1. 创建一个BOSClient类的实例。
      2. 调用BOSClient.DeleteBucket()方法删除Bucket。
    • 示例代码
    public void DeleteBucket(BosClient client, string bucketName)
    {
        // 删除Bucket
        client.DeleteBucket(bucketName); 
    }
    > **注意:**如果Bucket不为空(即Bucket中有Object和未完成的三步上传Part存在),则Bucket无法被删除,必须清空Bucket后才能成功删除。

    Bucket权限控制

    • 基本流程

      1. 创建一个BOSClient类的实例。
      2. 调用BOSClient.SetBucketAcl()方法。调用该方法时,您需要提供Bucket名称、权限字符串等内容。
      3. 您也可以构造一个SetBucketAclRequest来调用SetBucketAcl方法,SetBucketAclRequest可以设置指定用户对Bucket的访问权限。

    设置Bucket的访问权限

    • 示例代码

      如下代码将Bucket的权限设置为了private。

    public void SetBucketPrivate(BosClient client, string bucketName)
    {
        client.SetBucketAcl(bucketName, BosConstants.CannedAcl.Private);
    }
    > **说明:**BosConstants.CannedAcl包含三个常量定义: `Private` 、 `PublicRead` 、 `PublicReadWrite` ,它们分别对应相关权限。具体内容可以参考《BOS API文档 [使用CannedAcl方式的权限控制](BOS/API参考/访问控制.md#使用CannedAcl方式的权限控制)》。

    设置指定用户对Bucket的访问权限

    • 示例代码

      BOS还可以实现设置指定用户对Bucket的访问权限,参考如下代码实现:

    public void SetBucketAclFromBody(BosClient client, string bucketName)
    {
        List<Grant> grants = new List<Grant>();
        List<Grantee> grantee = new List<Grantee>();
        List<string> permission = new List<string>();
    
        //授权给特定用户
        grantee.Add(new Grantee() {Id = "userid1"});
        grantee.Add(new Grantee() {Id = "userid2"});
    
        //授权给Everyone
        grantee.Add(new Grantee() {Id = "*"});
    
        //设置权限
        permission.Add(BosConstants.Permission.Read);
        permission.Add(BosConstants.Permission.Write);
    
        grants.Add(new Grant() {Grantee = grantee, Permission = permission});
        client.SetBucketAcl(new SetBucketAclRequest() {BucketName = bucketName, AccessControlList = grants});
    }
    > **注意:** BosConstants.Permission中包含三个常量定义:`READ`、`WRITE`、`FULL_CONTROL`,它们分别对应相关权限。具体内容可以参考《BOS API文档 [上传ACL文件方式的权限控制](BOS/API参考/访问控制.md#上传ACL文件方式的权限控制)》。

    完整示例

    下面示例代码演示了Bucket权限控制的完整过程:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using BaiduBce;
    using BaiduBce.Auth;
    using BaiduBce.Services.Bos;
    using BaiduBce.Services.Bos.Model;
    
    namespace DotnetSample
    {
        internal class BucketAclSample
        {
            private static void Main(string[] args)
            {
                BosClient client = GenerateBosClient();
                const string bucketName = <BucketName>; //Bucket名称
    
                // 新建一个Bucket
                client.CreateBucket(bucketName); //指定Bucket名称
    
    
                // 设置Bucket为Private
                client.SetBucketAcl(bucketName, BosConstants.CannedAcl.Private);
    
                // 设置Bucket为PublicRead
                client.SetBucketAcl(bucketName, BosConstants.CannedAcl.PublicRead);
    
                List<Grant> grants = new List<Grant>();
                List<Grantee> grantee = new List<Grantee>();
                List<string> permission = new List<string>();
    
                //授权给特定用户
                grantee.Add(new Grantee() { Id = "userid1" });
                grantee.Add(new Grantee() { Id = "userid2" });
                //授权给Everyone
                grantee.Add(new Grantee() { Id = "*" });
    
                //设置权限
                permission.Add(BosConstants.Permission.Read);
                permission.Add(BosConstants.Permission.Write);
    
                grants.Add(new Grant() { Grantee = grantee, Permission = permission });
                client.SetBucketAcl(new SetBucketAclRequest() { BucketName = bucketName, AccessControlList = grants });
    
            }
    
            private static BosClient GenerateBosClient()
            {
                const string accessKeyId = <AccessKeyID>;        // 您的Access Key ID
                const string secretAccessKey = <SecretAccessKey>; // 您的Secret Access Key
                const string endpoint = <EndPoint>;       // 指定BOS服务域名
    
                // 初始化一个BosClient
                BceClientConfiguration config = new BceClientConfiguration();
                config.Credentials = new DefaultBceCredentials(accessKeyId, secretAccessKey);
                config.Endpoint = endpoint;
    
                return new BosClient(config);
            }
        }
    }

    完整示例

    下面示例代码演示了创建Bucket,查看Bucket,判断Bucket是否存在,删除Bucket的完整过程。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using BaiduBce;
    using BaiduBce.Auth;
    using BaiduBce.Services.Bos;
    using BaiduBce.Services.Bos.Model;
    
    namespace DotnetSample
    {
        internal class BucketSample
        {
            private static void Main(string[] args)
            {
                BosClient client = GenerateBosClient();
                const string bucketName = <BucketName>;    //指定Bucket名称
    
                // 新建一个Bucket
                client.CreateBucket(bucketName); 
    
                // 获取用户的Bucket列表
                List<BucketSummary> buckets = client.ListBuckets().Buckets;
    
                // 遍历Bucket
                foreach (BucketSummary bucket in buckets)
                {
                    Console.WriteLine(bucket.Name);
                }
    
                // 获取Bucket的存在信息
                bool exists = client.DoesBucketExist(bucketName); 
    
                // 输出结果
                if (exists)
                {
                    Console.WriteLine("Bucket exists");
                }
                else
                {
                    Console.WriteLine("Bucket not exists");
                }
    
                // 删除Bucket
                client.DeleteBucket(bucketName); 
    
                // 再次获取Bucket的存在信息
                exists = client.DoesBucketExist(bucketName); 
    
                // 输出结果
                if (exists)
                {
                    Console.WriteLine("Bucket exists");
                }
                else
                {
                    Console.WriteLine("Bucket not exists");
                }
                Console.ReadKey();
            }
    
            private static BosClient GenerateBosClient()
            {
                const string accessKeyId = <AccessKeyID>; // 您的Access Key ID
                const string secretAccessKey = <SecretAccessKey>; // 您的Secret Access Key
                const string endpoint = <EndPoint>; // 指定BOS服务域名
    
                // 初始化一个BosClient
                BceClientConfiguration config = new BceClientConfiguration();
                config.Credentials = new DefaultBceCredentials(accessKeyId, secretAccessKey);
                config.Endpoint = endpoint;
    
                return new BosClient(config);
            }
        }
    }
    上一篇
    初始化
    下一篇
    文件管理