全部产品
对象存储 OSS

管理Bucket

更新时间:2017-06-07 13:26:11   分享:   

Bucket 是 OSS 上的命名空间,也是计费、权限控制、日志记录等高级功能的管理实体;Bucket 名称在整个 OSS 服务中具有全局唯一性,且不能修改;存储在 OSS 上的每个 Object 必须都包含在某个 Bucket 中。

新建Bucket

以下代码可以新建一个Bucket:


CreateBucketRequest createBucketRequest = new CreateBucketRequest("<bucketName>");
createBucketRequest.setBucketACL(CannedAccessControlList.PublicRead); // 指定Bucket的ACL权限
createBucketRequest.setLocationConstraint("oss-cn-hangzhou"); // 指定Bucket所在的数据中心
OSSAsyncTask createTask = oss.asyncCreateBucket(createBucketRequest, new OSSCompletedCallback<CreateBucketRequest, CreateBucketResult>() {
    @Override
    public void onSuccess(CreateBucketRequest request, CreateBucketResult result) {
        Log.d("locationConstraint", request.getLocationConstraint());
        }

    @Override
    public void onFailure(CreateBucketRequest request, ClientException clientException, ServiceException serviceException) {
        // 请求异常
        if (clientException != null) {
            // 本地异常如网络异常等
            clientException.printStackTrace();
        }
        if (serviceException != null) {
            // 服务异常
            Log.e("ErrorCode", serviceException.getErrorCode());
            Log.e("RequestId", serviceException.getRequestId());
            Log.e("HostId", serviceException.getHostId());
            Log.e("RawMessage", serviceException.getRawMessage());
        }
    }
});

上述代码在创建bucket时,指定了Bucket的ACL和所在的数据中心。

  • 每个用户的Bucket数量不能超过10个。
  • 每个Bucket的名字全局唯一,也就是说创建的Bucket不能和其他用户已经在使用的Bucket同名,否则会创建失败。
  • 创建的时候可以选择Bucket ACL权限,如果不设置ACL,默认是private。
  • 创建成功结果返回Bucket所在数据中心。

获取Bucket ACL权限

以下代码可以获取Bucket ACL:

GetBucketACLRequest getBucketACLRequest = new GetBucketACLRequest("<bucketName>");
OSSAsyncTask getBucketAclTask = oss.asyncGetBucketACL(getBucketACLRequest, new OSSCompletedCallback<GetBucketACLRequest, GetBucketACLResult>() {
    @Override
    public void onSuccess(GetBucketACLRequest request, GetBucketACLResult result) {
        Log.d("BucketAcl", result.getBucketACL());
        Log.d("Owner", result.getBucketOwner());
        Log.d("ID", result.getBucketOwnerID());
    }

    @Override
    public void onFailure(GetBucketACLRequest request, ClientException clientException, ServiceException serviceException) {
        // 请求异常
        if (clientException != null) {
            // 本地异常如网络异常等
            clientException.printStackTrace();
        }
        if (serviceException != null) {
            // 服务异常
            Log.e("ErrorCode", serviceException.getErrorCode());
            Log.e("RequestId", serviceException.getRequestId());
            Log.e("HostId", serviceException.getHostId());
            Log.e("RawMessage", serviceException.getRawMessage());
        }
    }
});

上述代码在获取Bucket的ACL权限。

  • 目前Bucket有三种访问权限:public-read-write,public-read和private。
  • 只有Bucket的拥有者才能使用Get Bucket ACL这个接口。
  • 获取的结果中返回Bucket拥有者ID、拥有者名称(和ID保持一致)和权限。

删除Bucket

以下代码删除了一个Bucket:

DeleteBucketRequest deleteBucketRequest = new DeleteBucketRequest("<bucketName>");
OSSAsyncTask deleteBucketTask = oss.asyncDeleteBucket(deleteBucketRequest, new OSSCompletedCallback<DeleteBucketRequest, DeleteBucketResult>() {
    @Override
    public void onSuccess(DeleteBucketRequest request, DeleteBucketResult result) {
        Log.d("DeleteBucket", "Success!");
    }

    @Override
    public void onFailure(DeleteBucketRequest request, ClientException clientException, ServiceException serviceException) {
            // 请求异常
        if (clientException != null) {
            // 本地异常如网络异常等
            clientException.printStackTrace();
        }
        if (serviceException != null) {
            // 服务异常
            Log.e("ErrorCode", serviceException.getErrorCode());
            Log.e("RequestId", serviceException.getRequestId());
            Log.e("HostId", serviceException.getHostId());
            Log.e("RawMessage", serviceException.getRawMessage());
        }
});

注:

  • 为了防止误删除的发生,OSS不允许用户删除一个非空的Bucket。
  • 只有Bucket的拥有者才能删除这个Bucket。
本文导读目录
本文导读目录
以上内容是否对您有帮助?