全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
对象存储 OSS

管理Bucket

更新时间:2017-11-22 11:57:59

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

新建Bucket

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

  1. CreateBucketRequest createBucketRequest = new CreateBucketRequest("<bucketName>");
  2. createBucketRequest.setBucketACL(CannedAccessControlList.PublicRead); // 指定Bucket的ACL权限
  3. createBucketRequest.setLocationConstraint("oss-cn-hangzhou"); // 指定Bucket所在的数据中心
  4. OSSAsyncTask createTask = oss.asyncCreateBucket(createBucketRequest, new OSSCompletedCallback<CreateBucketRequest, CreateBucketResult>() {
  5. @Override
  6. public void onSuccess(CreateBucketRequest request, CreateBucketResult result) {
  7. Log.d("locationConstraint", request.getLocationConstraint());
  8. }
  9. @Override
  10. public void onFailure(CreateBucketRequest request, ClientException clientException, ServiceException serviceException) {
  11. // 请求异常
  12. if (clientException != null) {
  13. // 本地异常如网络异常等
  14. clientException.printStackTrace();
  15. }
  16. if (serviceException != null) {
  17. // 服务异常
  18. Log.e("ErrorCode", serviceException.getErrorCode());
  19. Log.e("RequestId", serviceException.getRequestId());
  20. Log.e("HostId", serviceException.getHostId());
  21. Log.e("RawMessage", serviceException.getRawMessage());
  22. }
  23. }
  24. });

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

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

获取Bucket ACL权限

以下代码可以获取Bucket ACL:

  1. GetBucketACLRequest getBucketACLRequest = new GetBucketACLRequest("<bucketName>");
  2. OSSAsyncTask getBucketAclTask = oss.asyncGetBucketACL(getBucketACLRequest, new OSSCompletedCallback<GetBucketACLRequest, GetBucketACLResult>() {
  3. @Override
  4. public void onSuccess(GetBucketACLRequest request, GetBucketACLResult result) {
  5. Log.d("BucketAcl", result.getBucketACL());
  6. Log.d("Owner", result.getBucketOwner());
  7. Log.d("ID", result.getBucketOwnerID());
  8. }
  9. @Override
  10. public void onFailure(GetBucketACLRequest request, ClientException clientException, ServiceException serviceException) {
  11. // 请求异常
  12. if (clientException != null) {
  13. // 本地异常如网络异常等
  14. clientException.printStackTrace();
  15. }
  16. if (serviceException != null) {
  17. // 服务异常
  18. Log.e("ErrorCode", serviceException.getErrorCode());
  19. Log.e("RequestId", serviceException.getRequestId());
  20. Log.e("HostId", serviceException.getHostId());
  21. Log.e("RawMessage", serviceException.getRawMessage());
  22. }
  23. }
  24. });

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

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

删除Bucket

以下代码删除了一个Bucket:

  1. DeleteBucketRequest deleteBucketRequest = new DeleteBucketRequest("<bucketName>");
  2. OSSAsyncTask deleteBucketTask = oss.asyncDeleteBucket(deleteBucketRequest, new OSSCompletedCallback<DeleteBucketRequest, DeleteBucketResult>() {
  3. @Override
  4. public void onSuccess(DeleteBucketRequest request, DeleteBucketResult result) {
  5. Log.d("DeleteBucket", "Success!");
  6. }
  7. @Override
  8. public void onFailure(DeleteBucketRequest request, ClientException clientException, ServiceException serviceException) {
  9. // 请求异常
  10. if (clientException != null) {
  11. // 本地异常如网络异常等
  12. clientException.printStackTrace();
  13. }
  14. if (serviceException != null) {
  15. // 服务异常
  16. Log.e("ErrorCode", serviceException.getErrorCode());
  17. Log.e("RequestId", serviceException.getRequestId());
  18. Log.e("HostId", serviceException.getHostId());
  19. Log.e("RawMessage", serviceException.getRawMessage());
  20. }
  21. });

注:

  • 为了防止误删除的发生,OSS不允许用户删除一个非空的Bucket。
  • 只有Bucket的拥有者才能删除这个Bucket。
本文导读目录