开发者社区> 问答> 正文

Java-SDK之如何实现管理Bucket?


创建Bucket


您可以使用OSSClient.createBucket创建Bucket。如下代码展示如何 新建一个Bucket: // endpoint以杭州为例,其它region请按实际情况填写
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
// 创建OSSClient实例
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);


  • // 创建bucket
    String bucketName = "<your-oss-bucket-name>";
    ossClient.createBucket(bucketName);
    // 关闭client
    ossClient.shutdown();


    提示:
    • Bucket的命名规范,参见基本概念中的命名规范。
    • Bucket的名字是[backcolor=transparent]全局唯一的,所以您需要保证Bucket名称不与别人重复。

    上面代码创建的Bucket,权限是[backcolor=transparent]私有读写,存储类型是[backcolor=transparent]标准类型(Standard)。创建Bucket时可以指定 Bucket权限存储类型,示例代码如下: CreateBucketRequest createBucketRequest= new CreateBucketRequest(bucketName);
    // 设置bucket权限为公共读,默认是私有读写
    createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
    // 设置bucket存储类型为低频访问类型,默认是标准类型
    createBucketRequest.setStorageClass(StorageClass.IA);
    ossClient.createBucket(createBucketRequest);


    [backcolor=transparent]注意:
    • 创建指定类型的Bucket,请使用Java SDK 2.6.0及以上版本。


    列举Bucket


    您可以使用OSSClient.listBuckets列举指定用户下的Bucket。

    [backcolor=transparent]注意:
    • 如果Bucket有低频存储类型或归档存储类型,请使用Java SDK 2.6.0及以上版本。


    简单列举


    以下代码展示如何采用简单方式列举指定用户的Bucket列表: // endpoint以杭州为例,其它region请按实际情况填写
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // accessKey请登录https://ak-console.aliyun.com/#/查看
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    // 创建OSSClient实例
    OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    // 列举bucket
    List<Bucket> buckets = ossClient.listBuckets();
    for (Bucket bucket : buckets) {
        System.out.println(" - " + bucket.getName());
    }
    // 关闭client
    ossClient.shutdown();


    上面的代码最多只能返回100个Bucket,已经能满足用户的需求。列举Bucket时,通过指定prefix、marker、maxkeys参数,可以过滤Bucket列表,实现灵活的查询功能。
    参数作用
    prefix限定返回的Bucket name必须以prefix作为前缀,可以不设定,不设定时不过滤前缀信息
    marker设定结果从marker之后按字母排序的第一个开始返回,可以不设定,不设定时从头开始返回
    max keys限定此次返回Bucket的最大数,如果不设定,默认为100,max-keys取值不能大于1000


    指定前缀列举
    ListBucketsRequest listBucketsRequest = new ListBucketsRequest();
    listBucketsRequest.setPrefix("<yourBucketPrefix>");
    for (Bucket bucket : ossClient.listBuckets()) {
        System.out.println(" - " + bucket.getName());
    }



    指定max keys列举
    ListBucketsRequest listBucketsRequest = new ListBucketsRequest();
    listBucketsRequest.setMaxKeys(500);
    for (Bucket bucket : ossClient.listBuckets()) {
        System.out.println(" - " + bucket.getName());
    }



    删除Bucket


    您可以使用OSSClient.deleteBucket删除Bucket。以下代码展示如何删除一个Bucket: // endpoint以杭州为例,其它region请按实际情况填写
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // accessKey请登录https://ak-console.aliyun.com/#/查看
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    // 创建OSSClient实例
    OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    // 删除bucket
    ossClient.deleteBucket("<bucketName>");
    // 关闭client
    ossClient.shutdown();


    提示:
    • 如果存储空间不为空(存储空间中有文件或者分片上传碎片),则存储空间无法删除;
    • 必须先删除存储空间中的所有文件后,存储空间才能成功删除。


    判断Bucket是否存在


    您可以使用OSSClient.doesBucketExist接口判断该Bucket是否已存在。以下代码展示如何判断指定Bucket是否存在: // endpoint以杭州为例,其它region请按实际情况填写
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // accessKey请登录https://ak-console.aliyun.com/#/查看
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    // 创建OSSClient实例
    OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    boolean exists = ossClient.doesBucketExist("<bucketName>");
    // 关闭client
    ossClient.shutdown();



    设置Bucket ACL


    Bucket的ACL包含三类:Private(私有读写), PublicRead(公共读私有写), PublicReadWrite(公共读写)。您可以通过OSSClient.setBucketAcl设置bucket的权限。
    权限Java SDK对应值
    私有读写CannedAccessControlList.Private
    公共读私有写CannedAccessControlList.PublicRead
    公共读写CannedAccessControlList.PublicReadWrite

    以下代码展示如何设置Bucket的权限: // endpoint以杭州为例,其它region请按实际情况填写
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // accessKey请登录https://ak-console.aliyun.com/#/查看
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    // 创建OSSClient实例
    OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    // 设置bucket权限
    ossClient.setBucketAcl("<bucketName>", CannedAccessControlList.Private);
    // 关闭client
    ossClient.shutdown();



    获取Bucket ACL


    您可以通过OSSClient.getBucketAcl获取bucket的权限。以下代码展示如何获取Bucket的ACL: // endpoint以杭州为例,其它region请按实际情况填写
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // accessKey请登录https://ak-console.aliyun.com/#/查看
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    // 创建OSSClient实例
    OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    AccessControlList acl = ossClient.getBucketAcl("<bucketName>");
    // Bucket权限
    System.out.println(acl.toString());

    // 关闭client
    ossClient.shutdown();



    获取Bucket Location


    Bucket Location即Bucket Region,详细请参看 基本概念中的Region(区域)。
    您可以通过OSSClient.getBucketLocation获取bucket的权限。以下代码展示如何获取Bucket的Location: // endpoint以杭州为例,其它region请按实际情况填写
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // accessKey请登录https://ak-console.aliyun.com/#/查看
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    // 创建OSSClient实例
    OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    String location = ossClient.getBucketLocation("<bucketName>");
    System.out.println(location);
    // 关闭client
    ossClient.shutdown();



    获取Bucket Info


    Bucket的Info包括Location、CreationDate、Owner及权限等信息。以下代码展示如何获取Bucket的Info: // endpoint以杭州为例,其它region请按实际情况填写
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // accessKey请登录https://ak-console.aliyun.com/#/查看
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    // 创建OSSClient实例
    OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    BucketInfo info = ossClient.getBucketInfo("<bucketName>");
    // Location
    info.getBucket().getLocation();
    // 创建日期
    info.getBucket().getCreationDate();
    // owner
    info.getBucket().getOwner();
    // 权限
    info.getGrants();
    // 关闭client
    ossClient.shutdown();


    展开
    收起
    青衫无名 2017-10-18 10:39:50 2229 0
    0 条回答
    写回答
    取消 提交回答
    问答排行榜
    最热
    最新

    相关电子书

    更多
    跨平台的云服务SDK需要什么 立即下载
    如何通过 Serverless 提高 Java 微服务治理效 立即下载
    一个跨平台的云服务SDK需要什么 立即下载