存储空间(Bucket)是存储对象(Object)的容器。对象都隶属于存储空间。

创建存储空间

以下代码用于创建存储空间:

CreateBucketRequest createBucketRequest = new CreateBucketRequest("<bucketName>");

// 指定Bucket的ACL权限。
createBucketRequest.setBucketACL(CannedAccessControlList.PublicRead); 
// 指定Bucket所在的数据中心。
createBucketRequest.setLocationConstraint("oss-cn-hangzhou"); 

// 异步创建存储空间。
OSSAsyncTask createTask = oss.asyncCreateBucket(createBucketRequest, new OSSCompletedCallback<CreateBucketRequest, CreateBucketResult>() {
    @Override
    public void onSuccess(CreateBucketRequest request, CreateBucketResult result) {
        Log.d("asyncCreateBucket", "Success");
    }
    @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数量不能超过30个。
  • 创建Bucket时可以选择Bucket ACL权限,如果不设置ACL,默认是private。
  • 每个Bucket的名称全局唯一,不能出现同名Bucket,否则会创建失败。
  • 创建成功后,结果返回至Bucket所在地域。

获取存储空间的访问权限

以下代码用于获取存储空间的访问权限:

// 构造上传请求。
GetBucketACLRequest getBucketACLRequest = new GetBucketACLRequest("<bucketName>");

// 获取存储空间访问权限。
OSSAsyncTask getBucketAclTask = oss.asyncGetBucketACL(getBucketACLRequest, new OSSCompletedCallback<GetBucketACLRequest, GetBucketACLResult>() {
    @Override
    public void onSuccess(GetBucketACLRequest request, GetBucketACLResult result) {
        Log.d("asyncGetBucketACL", "Success!");
        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有三种访问权限:public-read-write,public-read和private。
  • 只有Bucket的拥有者才能使用Get Bucket ACL这个接口。
  • 获取的结果中返回Bucket拥有者ID、拥有者名称(和ID保持一致)和权限。

删除存储空间

以下代码用于删除单个存储空间:

// 构造上传请求。
DeleteBucketRequest deleteBucketRequest = new DeleteBucketRequest("<bucketName>");

// 异步删除存储空间。
OSSAsyncTask deleteBucketTask = oss.asyncDeleteBucket(deleteBucketRequest, new OSSCompletedCallback<DeleteBucketRequest, DeleteBucketResult>() {
    @Override
    public void onSuccess(DeleteBucketRequest request, DeleteBucketResult result) {
        Log.d("asyncDeleteBucket", "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。