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

创建存储空间

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

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";

// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

// 创建存储空间。
String bucketName = "<yourBucketName>";
// 新建存储空间默认为标准存储类型,私有权限。
ossClient.createBucket(bucketName);

// 关闭OSSClient。
ossClient.shutdown();

存储空间的命名规范,请参见基本概念中的命名规范

您可以在创建存储空间时指定存储空间的权限存储类型。如果需要创建低频或归档类型的存储空间,请使用Java SDK 2.6.0及以上版本。示例代码如下:

CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
// 设置存储空间的权限为公共读,默认是私有。
createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
// 设置存储空间的存储类型为低频访问类型,默认是标准类型。
createBucketRequest.setStorageClass(StorageClass.IA);
ossClient.createBucket(createBucketRequest);

列举存储空间

存储空间按照字母顺序排列。您可以列举所有的存储空间,或符合指定条件的存储空间。如果有低频类型或归档类型的存储空间,请使用Java SDK 2.6.0及以上版本。

  • 列举所有的存储空间

    以下代码用于列举所有的存储空间:

    // Endpoint以杭州为例,其它Region请按实际情况填写。
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    
    // 创建OSSClient实例。
    OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    
    // 列举存储空间。
    List<Bucket> buckets = ossClient.listBuckets();
    for (Bucket bucket : buckets) {
        System.out.println(" - " + bucket.getName());
    }
    
    // 关闭OSSClient。
    ossClient.shutdown();
    
  • 列举指定前缀的存储空间

    以下代码用于列举包含指定前缀(prefix)的存储空间:

    ListBucketsRequest listBucketsRequest = new ListBucketsRequest();
    // 列举指定前缀的存储空间。
    listBucketsRequest.setPrefix("<yourBucketPrefix>");
    BucketList bucketList = ossClient.listBuckets(listBucketsRequest);
    for (Bucket bucket : bucketList.getBucketList()) {
        System.out.println(" - " + bucket.getName());
    }
    
  • 列举指定marker之后的存储空间

    参数marker代表存储空间名称。以下代码用于列举指定marker之后的存储空间:

    ListBucketsRequest listBucketsRequest = new ListBucketsRequest();
    // 列举指定marker之后的存储空间。
    listBucketsRequest.setMarker("<yourBucketMarker>");
    BucketList bucketList = ossClient.listBuckets(listBucketsRequest);
    for (Bucket bucket : bucketList.getBucketList()) {
        System.out.println(" - " + bucket.getName());
    }
    
  • 列举指定个数的存储空间

    以下代码用于列举指定个数(maxKeys)的存储空间:

    ListBucketsRequest listBucketsRequest = new ListBucketsRequest();
    // 限定此次列举存储空间的个数为500。默认值为100,最大值为1000。
    listBucketsRequest.setMaxKeys(500);
    BucketList bucketList = ossClient.listBuckets(listBucketsRequest);
    for (Bucket bucket : bucketList.getBucketList()) {
        System.out.println(" - " + bucket.getName());
    }
    

判断存储空间是否存在

以下代码用于判断指定的存储空间是否存在:

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";

// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

boolean exists = ossClient.doesBucketExist("<yourBucketName>");

// 关闭OSSClient。
ossClient.shutdown();

设置存储空间的访问权限

存储空间的访问权限(ACL)有以下三类:

访问权限 描述 访问权限值
私有 存储空间的拥有者和授权用户有该存储空间内的文件的读写权限,其他用户没有权限操作该存储空间内的文件。 CannedAccessControlList.Private
公共读 存储空间的拥有者和授权用户有该存储空间内的文件的读写权限,其他用户只有该存储空间内的文件的读权限。请谨慎使用该权限。 CannedAccessControlList.PublicRead
公共读写 所有用户都有该存储空间内的文件的读写权限。请谨慎使用该权限。 CannedAccessControlList.PublicReadWrite

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

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";

// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

// 设置存储空间的访问权限为私有。
ossClient.setBucketAcl("<yourBucketName>", CannedAccessControlList.Private);

// 关闭OSSClient。
ossClient.shutdown();

获取存储空间的访问权限

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

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";

// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 获取存储空间的访问权限。
AccessControlList acl = ossClient.getBucketAcl("<yourBucketName>");
System.out.println(acl.toString());

// 关闭OSSClient。
ossClient.shutdown();

获取存储空间的地域

以下代码用于获取存储空间的地域(称为Region或Location):

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";

// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

String location = ossClient.getBucketLocation("<yourBucketName>");
System.out.println(location);

// 关闭OSSClient。
ossClient.shutdown();

关于地域的详细信息请参见基本概念中的地域

获取存储空间的信息

以下代码用于获取存储空间的信息(Info):

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";

// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

// 存储空间的信息包括地域(Region或Location)、创建日期(CreationDate)、拥有者(Owner)、权限(Grants)等。
BucketInfo info = ossClient.getBucketInfo("<yourBucketName>");
// 获取地域。
info.getBucket().getLocation();
// 获取创建日期。
info.getBucket().getCreationDate();
// 获取拥有者信息。
info.getBucket().getOwner();
// 获取权限信息。
info.getGrants();

// 关闭OSSClient。
ossClient.shutdown();

删除存储空间

删除存储空间之前,必须先删除存储空间下的所有文件、LiveChannel和分片上传产生的碎片。

说明 要删除分片上传产生的碎片,首先使用Bucket.ListMultipartUploads列举出所有碎片,然后使用Bucket.AbortMultipartUpload删除这些碎片。

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

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";

// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

// 删除存储空间。
ossClient.deleteBucket("<yourBucketName>");

// 关闭OSSClient。
ossClient.shutdown();