创建存储空间

存储空间(Bucket)是OSS中存放文件的基本容器,容量无限,可以弹性扩展。

基础配置

Bucket 的核心基础信息,创建后不可更改

  • Bucket名称:全局唯一。建议按照部门或业务标识命名,便于识别和管理。例如:hr-documents

  • 地域:决定数据的物理存储位置,建议按以下优先级选择:

    1. 合规优先:首先选择符合法规要求的地域。

    2. 性能优先:选择距离目标用户最近的地域,降低网络延迟;若数据通过阿里云产品(例如 ECS)访问,建议选择相同地域,可免内网流量费用,同时减少跨地域传输延迟。

    3. 功能支持:参考新功能发布记录确认地域是否支持所需功能。

    4. 成本平衡:在满足以上条件的前提下,选择资费。更优惠的地域。

仅设置Bucket 名称和地域创建时,其余配置将自动使用默认值:标准存储、同城冗余、私有权限。阻止公共访问在控制台创建时开启,ossutil/SDK/API 创建时关闭。其他可选配置均为关闭状态。

控制台

  1. OSS管理控制台Bucket 列表页面,单击创建 Bucket

  2. 创建 Bucket 面板,设置Bucket名称地域,单击底部完成创建

ossutil

您可以使用命令行工具ossutil来创建存储空间,ossutil的安装请参见安装ossutil

  1. 配置所需的Bucket地域。

    ossutil config
  2. 根据提示回车跳过前置配置项,直到出现地域配置:

    Please enter Region [cn-hangzhou]:

    输入目标地域ID(如cn-beijing)后回车,或直接回车使用默认的cn-hangzhou。地域ID可在OSS地域列表中查找。

  3. 创建存储空间examplebucket。

    ossutil mb oss://examplebucket
  4. 验证Bucket是否创建成功。

    ossutil ls

如果您想了解该命令的更多信息,请参见mb(创建存储空间)

SDK

以下仅列举常见SDK的创建存储空间代码示例。关于其他SDK的创建存储空间代码示例,请参见SDK简介

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.CreateBucketRequest;
import com.aliyun.oss.model.DataRedundancyType;
import com.aliyun.oss.model.StorageClass;

public class CreateBucket {

    public static void main(String[] args) throws Exception {
        // yourEndpoint填写Bucket所在地域对应的Endpoint。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填写Bucket名称。
        String bucketName = "examplebucket";
        // 填写资源组ID。如果不填写资源组ID,则创建的Bucket属于默认资源组。
        //String rsId = "rg-aek27tc****";
        // 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
        String region = "cn-hangzhou";

        // 创建OSSClient实例。
        // 当OSSClient实例不再使用时,调用shutdown方法以释放资源。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // 创建CreateBucketRequest对象。
            CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);

            // 如果创建存储空间的同时需要指定存储类型、存储空间的读写权限、数据容灾类型, 请参考如下代码。
            // 此处以设置存储空间的存储类型为标准存储为例介绍。
            //createBucketRequest.setStorageClass(StorageClass.Standard);
            // 数据容灾类型默认为本地冗余存储,即DataRedundancyType.LRS。如果需要设置数据容灾类型为同城冗余存储,请设置为DataRedundancyType.ZRS。
            //createBucketRequest.setDataRedundancyType(DataRedundancyType.ZRS);
            // 设置存储空间读写权限为公共读,默认为私有。
            //createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);

            // 在支持资源组的地域创建Bucket时,您可以为Bucket配置资源组。
            //createBucketRequest.setResourceGroupId(rsId);

            // 创建存储空间。
            ossClient.createBucket(createBucketRequest);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
import argparse
import alibabacloud_oss_v2 as oss

# 创建命令行参数解析器
parser = argparse.ArgumentParser(description="put bucket sample")
# 添加命令行参数 --region,表示存储空间所在的区域,必需参数
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# 添加命令行参数 --bucket,表示存储空间的名称,必需参数
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# 添加命令行参数 --endpoint,表示其他服务可用来访问OSS的域名,非必需参数
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    args = parser.parse_args()  # 解析命令行参数

    # 从环境变量中加载凭证信息,用于身份验证
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 加载SDK的默认配置,并设置凭证提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    # 设置配置中的区域信息
    cfg.region = args.region
    # 如果提供了endpoint参数,则设置配置中的endpoint
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 使用配置好的信息创建OSS客户端
    client = oss.Client(cfg)

    # 执行创建存储空间的请求,存储类型为标准存储
    result = client.put_bucket(oss.PutBucketRequest(
        bucket=args.bucket,
        create_bucket_configuration=oss.CreateBucketConfiguration(
            storage_class='Standard'
        )
    ))
    # 输出请求的结果状态码和请求ID,用于检查请求是否成功
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
    )


if __name__ == "__main__":
    main()  # 脚本入口,当文件被直接运行时调用main函数
package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// 定义全局变量
var (
	region     string // 存储区域
	bucketName string // 存储空间名称
)

// init函数用于初始化命令行参数
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// 解析命令行参数
	flag.Parse()

	// 检查bucket名称是否为空
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// 检查region是否为空
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// 加载默认配置并设置凭证提供者和区域
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 创建OSS客户端
	client := oss.NewClient(cfg)

	request := &oss.PutBucketRequest{
		Bucket: oss.Ptr(bucketName), // 存储空间名称
	}

	// 发送创建存储空间的请求
	result, err := client.PutBucket(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put bucket %v", err)
	}

	// 打印创建存储空间的结果
	log.Printf("put bucket result:%#v\n", result)
}
<?php

// 引入自动加载文件,加载依赖库
require_once __DIR__ . '/../vendor/autoload.php'; 

use AlibabaCloud\Oss\V2 as Oss;

// 定义命令行参数描述
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // 区域是必填项,存储空间所在的区域,例如 oss-cn-hangzhou。
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // 终端节点是可选项,其他服务可以用来访问OSS的域名。
    "bucket" => ['help' => 'The name of the bucket', 'required' => True], // 存储空间名称是必填项。
];

// 生成长选项数组,用于解析命令行参数
$longopts = \array_map(function ($key) {
    return "$key:"; // 每个参数后面加冒号,表示需要值
}, array_keys($optsdesc));

// 解析命令行参数
$options = getopt("", $longopts); 

// 检查必填参数是否缺失
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: the following arguments are required: --$key, $help"; // 提示用户缺少必填参数
        exit(1); 
    }
}

// 获取命令行参数值
$region = $options["region"]; // 存储空间所在区域
$bucket = $options["bucket"]; // 存储空间名称

// 使用环境变量加载凭证信息(AccessKeyId 和 AccessKeySecret)
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider(); 

// 使用SDK的默认配置
$cfg = Oss\Config::loadDefault(); 
$cfg->setCredentialsProvider($credentialsProvider); //  设置凭证提供者
$cfg->setRegion($region); // 设置区域
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // 如果提供了终端节点,则设置终端节点
}

// 创建OSS客户端实例
$client = new Oss\Client($cfg); //  创建OSS客户端实例

// 创建存储空间请求对象
$request = new Oss\Models\PutBucketRequest($bucket); //  创建存储空间请求对象

// 调用putBucket方法创建存储空间
$result = $client->putBucket($request); // 调用putBucket方法创建存储空间

// 打印返回结果
printf(
    'status code:' . $result->statusCode . PHP_EOL . //  HTTP响应状态码
    'request id:' . $result->requestId // Request ID. 请求的唯一标识
);
using Aliyun.OSS;
using Aliyun.OSS.Common;

// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
var endpoint = "yourEndpoint";
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 填写Bucket名称。
var bucketName = "examplebucket";
// 填写Bucket所在地域对应的Region。以华东1(杭州)为例,Region填写为cn-hangzhou。
const string region = "cn-hangzhou";

// 创建ClientConfiguration实例,按照您的需要修改默认参数。
var conf = new ClientConfiguration();

// 设置v4签名。
conf.SignatureVersion = SignatureVersion.V4;

// 创建OssClient实例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
// 创建存储空间。
try
    {
        var request = new CreateBucketRequest(bucketName);
        //设置读写权限ACL为公共读PublicRead,默认为私有权限。
        request.ACL = CannedAccessControlList.PublicRead;
        //设置数据容灾类型为同城冗余存储。
        request.DataRedundancyType = DataRedundancyType.ZRS;
        client.CreateBucket(request);
        Console.WriteLine("Create bucket succeeded");
    }
    catch (Exception ex)
    {
        Console.WriteLine("Create bucket failed. {0}", ex.Message);
    }
const OSS = require('ali-oss');

const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourregion',
  // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // yourBucketName填写Bucket名称。
  bucket: 'yourBucketName',
});

// 创建存储空间。
async function putBucket() {
  try {
    const options = {
      storageClass: 'Standard', // 存储空间的默认存储类型为标准存储,即Standard。如果需要设置存储空间的存储类型为归档存储,请替换为Archive。
      acl: 'private', // 存储空间的默认读写权限为私有,即private。如果需要设置存储空间的读写权限为公共读,请替换为public-read。
      dataRedundancyType: 'LRS' // 存储空间的默认数据容灾类型为本地冗余存储,即LRS。如果需要设置数据容灾类型为同城冗余存储,请替换为ZRS。
    }
    // 填写Bucket名称。
    const result = await client.putBucket('examplebucket', options);
    console.log(result);
  } catch (err) {
    console.log(err);
  }
}

putBucket();        
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
  # Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# 填写Bucket名称,例如examplebucket。
client.create_bucket('examplebucket')
// 构建创建Bucket的请求。
// 填写Bucket名称。
CreateBucketRequest createBucketRequest = new CreateBucketRequest("examplebucket");。
// 设置Bucket的读写权限ACL。
// createBucketRequest.setBucketACL(CannedAccessControlList.Private);
// 指定Bucket的存储类型。
// createBucketRequest.setBucketStorageClass(StorageClass.Standard);

// 异步创建存储空间。
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());
        }
    }
});
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /*初始化OSS账号信息。*/
    
    /*yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
    std::string Endpoint = "yourEndpoint";
    
    / *yourRegion填写Bucket所在地域对应的Region。以华东1(杭州)为例,Region填写为cn - hangzhou。 * /
    std::string Region = "yourRegion";

    /*填写Bucket名称,例如examplebucket。*/
    std::string BucketName = "examplebucket";

    /*初始化网络等资源。*/
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /*指定新创建bucket的名称、存储类型和ACL。*/
    CreateBucketRequest request(BucketName, StorageClass::IA, CannedAccessControlList::PublicReadWrite);
    /*设置数据容灾类型为同城冗余存储。*/
    //request.setDataRedundancyType(DataRedundancyType::ZRS);

    /*创建Bucket。*/
    auto outcome = client.CreateBucket(request);

    if (!outcome.isSuccess()) {
        /*异常处理。*/
        std::cout << "CreateBucket fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /*释放网络等资源。*/
    ShutdownSdk();
    return 0;
}
// 构建创建Bucket的请求。
OSSCreateBucketRequest * create = [OSSCreateBucketRequest new];
// 设置存储空间名称为examplebucket。
create.bucketName = @"examplebucket";
// 设置访问权限为私有。
create.xOssACL = @"private";
// 设置存储类型为低频访问类型IA。
create.storageClass = OSSBucketStorageClassIA;

OSSTask * createTask = [client createBucket:create];

[createTask continueWithBlock:^id(OSSTask *task) {
    if (!task.error) {
        NSLog(@"create bucket success!");
    } else {
        NSLog(@"create bucket failed, error: %@", task.error);
    }
    return nil;
}];
// 实现同步阻塞等待任务完成。
// [createTask waitUntilFinished];          
#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
const char *endpoint = "yourEndpoint";
/* 填写Bucket名称,例如examplebucket。*/
const char *bucket_name = "examplebucket";
/* yourRegion填写Bucket所在地域对应的Region。以华东1(杭州)为例,Region填写为cn-hangzhou。*/
const char *region = "yourRegion";

void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* 用char*类型的字符串初始化aos_string_t类型。*/
    aos_str_set(&options->config->endpoint, endpoint);
    /* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/  
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    //需要额外配置以下两个参数
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* 是否使用CNAME域名访问OSS服务。0表示不使用。 */
    options->config->is_cname = 0;
    /* 设置网络相关参数,比如超时时间等。*/
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* 在程序入口调用aos_http_io_initialize方法来初始化网络、内存等全局资源。 */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* 用于内存管理的内存池(pool),等价于apr_pool_t。其实现代码在apr库中。*/
    aos_pool_t *pool;
    /* 重新创建一个内存池,第二个参数是NULL,表示没有继承其它内存池。*/
    aos_pool_create(&pool, NULL);
    /* 创建并初始化options,该参数包括endpoint、access_key_id、acces_key_secret、is_cname、 curl等全局配置信息。*/
    oss_request_options_t *oss_client_options;
    /* 在内存池中分配内存给options。*/
    oss_client_options = oss_request_options_create(pool);
    /* 初始化Client的选项oss_client_options。*/
    init_options(oss_client_options);
    /* 初始化参数。*/
    aos_string_t bucket;
    oss_acl_e oss_acl = OSS_ACL_PRIVATE;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    /* 将char*类型数据赋值给aos_string_t类型的存储空间。 */
    aos_str_set(&bucket, bucket_name);
    /* 创建存储空间。*/
    resp_status = oss_create_bucket(oss_client_options, &bucket, oss_acl, &resp_headers);
    /* 判断请求是否成功。 */
    if (aos_status_is_ok(resp_status)) {
        printf("create bucket succeeded\n");
    } else {
        printf("create bucket failed\n");
    }
    /* 释放内存池,相当于释放了请求过程中各资源分配的内存。*/
    aos_pool_destroy(pool);
    /* 释放之前分配的全局资源。 */
    aos_http_io_deinitialize();
    return 0;
}

API

调用 PutBucket 创建Bucket时,通过 Host 请求头指定名称和地域。

存储类型

OSS 提供标准低频归档冷归档深度冷归档五种存储类型,默认为标准存储。这些类型成本递减但访问限制递增,用于适配不同访问频率的数据。

Object默认继承Bucket的存储类型。虽然Bucket存储类型创建后无法修改,但内部Object可通过生命周期自动转换存储类型以优化成本。

  • 标准存储(Standard)

    适合单文件月访问>1次的活跃数据,支持实时访问。不确定数据访问频率时的首选,后续可通过生命周期规则自动降级到更低成本的存储类型。

  • 低频访问存储(IA):

    适合单文件月访问≤1次的温数据,如备份文件、操作日志。支持实时访问但有30天最短存储周期限制,提前删除仍按30天计费。不适合临时或测试数据。

  • 归档存储(Archive):

    适合单文件90天访问<1次的冷数据。支持归档直读实时访问,也可选择先解冻再读取(解冻约1分钟),有60天最短存储周期。

    解冻:将数据恢复为可访问状态,需等待一定时间。
  • 冷归档存储(ColdArchive)

    适合单文件年访问<1次的数据。读取需先解冻,耗时1~12小时,成本更低。

  • 深度冷归档存储(DeepColdArchive)

    最低成本选项,适合单文件年访问<1次的数据。解冻时间12/48小时,不建议直接作为Bucket类型创建,更适合通过生命周期规则将数据自动转换至此类型。

控制台

创建 Bucket 时,根据您的需求配置Bucket存储类型信息。

ossutil

以下命令用于创建存储类型为低频(IA)的存储空间examplebucket

ossutil mb oss://examplebucket --storage-class IA

如果您想了解该命令的更多信息,请参见mb(创建存储空间)

OSS SDK

以下仅列举常见SDK的创建存储空间代码示例。关于其他SDK的创建存储空间代码示例,请参见SDK简介

Java

要设置存储类型,请按如下方式配置 CreateBucketRequest 对象。

// 准备一个包含存储类型的请求对象
CreateBucketRequest createBucketRequest = new CreateBucketRequest("your-bucket-name");
createBucketRequest.setStorageClass(StorageClass.IA); // 在此处指定存储类型

// 可选项: StorageClass.Standard, StorageClass.IA, StorageClass.Archive, 等

完整示例请参考:创建存储空间(Java SDK)

Python

在调用client.put_bucket方法时,通过create_bucket_configuration 参数指定存储类型。

# 准备一个包含存储类型的请求对象
req = oss.PutBucketRequest(
    bucket="your-bucket-name",
    create_bucket_configuration=oss.CreateBucketConfiguration(
        storage_class='IA'  # 在此处指定存储类型
    )
)

# 可选项: 'Standard', 'IA', 'Archive', 'ColdArchive', 'DeepColdArchive'

完整示例请参考:创建存储空间(Python SDK V2)

Go

要设置存储类型,请在创建 PutBucketRequest 时配置 CreateBucketConfiguration 字段。

request := &oss.PutBucketRequest{
    Bucket: oss.Ptr("your-bucket-name"),
    CreateBucketConfiguration: &oss.CreateBucketConfiguration{
        StorageClass: oss.StorageClassIA, // 在此处指定存储类型
    },
}

// 可选项: oss.StorageClassStandard, oss.StorageClassIA, oss.StorageClassArchive 等

完整示例请参考:创建存储空间(Go SDK V2)

PHP

要设置存储类型,请在创建 PutBucketRequest 对象时,通过构造函数传入一个CreateBucketConfiguration对象。

// 准备一个包含存储类型等配置的请求对象
$request = new Oss\Models\PutBucketRequest(
    "your-bucket-name",
    null, // acl
    null, // resourceGroupId
    new Oss\Models\CreateBucketConfiguration(
        'IA',             // 在此处指定存储类型
    )
);

/* 
 * 可选存储类型: 'Standard', 'IA', 'Archive', 'ColdArchive', 'DeepColdArchive'
*/

完整示例请参考:创建存储空间(PHP SDK V2)

C#

要设置存储类型,请创建一个CreateBucketRequest对象并按如下方式配置其属性。

// 准备一个包含存储类型配置的 request 对象
var request = new CreateBucketRequest("your-bucket-name");
request.StorageClass = StorageClass.IA;             // 在此处指定存储类型

// 可选存储类型: StorageClass.Standard, StorageClass.IA, StorageClass.Archive, 等

完整示例请参考:创建存储空间

Node.js

要设置存储类型,请创建一个options对象并将其传递给 putBucket 方法。

// 准备一个包含存储类型配置的 options 对象
const options = {
  storageClass: 'IA',              // 在此处指定存储类型
};

// 可选存储类型: 'Standard', 'IA', 'Archive', 'ColdArchive', 'DeepColdArchive'

完整示例请参考:创建存储空间

Android

要设置存储类型或访问权限,请创建一个CreateBucketRequest对象并按如下方式配置。

// 准备一个包含存储类型等配置的 request 对象
CreateBucketRequest createBucketRequest = new CreateBucketRequest("your-bucket-name");
createBucketRequest.setBucketStorageClass(StorageClass.IA);         // 在此处指定存储类型

// 可选存储类型: StorageClass.Standard, StorageClass.IA, StorageClass.Archive, 等

完整示例请参考:创建存储空间

iOS

要设置存储类型,请创建一个OSSCreateBucketRequest对象并按如下方式配置其属性。

// 准备一个包含存储类型等配置的 request 对象
OSSCreateBucketRequest *create = [OSSCreateBucketRequest new];
create.bucketName = @"your-bucket-name";
create.storageClass = OSSBucketStorageClassIA;     // 在此处指定存储类型

// 可选存储类型: OSSBucketStorageClassStandard, OSSBucketStorageClassIA, 等

完整示例请参考:创建存储空间

API

调用 PutBucket 时,通过 StorageClass 请求元素指定 Bucket 的存储类型。

存储冗余类型

决定数据的容灾能力,默认为同城冗余存储。本地冗余存储可升级为同城冗余,但不支持反向转换。

  • 同城冗余存储(ZRS)- 生产环境推荐

    将数据存储在同一地域的多个可用区(AZ),能够在整个可用区发生故障时保障业务的持续访问,具备更高的数据持久性和服务可用性。

  • 本地冗余存储(LRS)- 非核心或测试数据

    将数据冗余存储在单个可用区内,成本更低。可抵御硬件故障,但无法在可用区故障时保障数据访问。

控制台

创建 Bucket 时,您可以在 Bucket 基本信息下的存储冗余类型选择 Bucket 的数据容灾类型。

使用ossutil

以下命令用于创建存储冗余类型为本地冗余(LRS)的存储空间examplebucket

ossutil mb oss://examplebucket --redundancy-type LRS

如果您想了解该命令的更多信息,请参见mb(创建存储空间)

使用OSS SDK

Java

要设置存储冗余类型,请按如下方式配置 CreateBucketRequest 对象。

// 准备一个包含存储冗余类型的请求对象
CreateBucketRequest createBucketRequest = new CreateBucketRequest("your-bucket-name");
createBucketRequest.setDataRedundancyType(DataRedundancyType.ZRS); // 在此处指定存储冗余类型

// 可选项: DataRedundancyType.ZRS, DataRedundancyType.LRS

完整示例请参考:创建存储空间(Java SDK)

Python

在调用client.put_bucket方法时,通过create_bucket_configuration 参数指定存储冗余类型。

# 准备一个包含存储冗余类型的请求对象
req = oss.PutBucketRequest(
    bucket="your-bucket-name",
    create_bucket_configuration=oss.CreateBucketConfiguration(
        data_redundancy_type='ZRS'  # 在此处指定存储冗余类型
    )
)

# 可选项: 'ZRS', 'LRS'

完整示例请参考:创建存储空间(Python SDK V2)

Go

要设置存储冗余类型,请在创建 PutBucketRequest 时配置 CreateBucketConfiguration 字段。

request := &oss.PutBucketRequest{
    Bucket: oss.Ptr("your-bucket-name"),
    CreateBucketConfiguration: &oss.CreateBucketConfiguration{
        DataRedundancyType: oss.DataRedundancyZRS, // 在此处指定存储冗余类型
    },
}

// 可选项: oss.DataRedundancyZRS, oss.DataRedundancyLRS

完整示例请参考:创建存储空间(Go SDK V2)

PHP

要设置存储冗余类型,请在创建 PutBucketRequest 对象时,通过构造函数传入一个CreateBucketConfiguration对象。

// 准备一个包含存储冗余类型等配置的请求对象
$request = new Oss\Models\PutBucketRequest(
    "your-bucket-name",
    null, // acl
    null, // resourceGroupId
    new Oss\Models\CreateBucketConfiguration(
        null,             // 在此处指定存储冗余类型
        'ZRS'
    )
);

/* 
 * 可选存储冗余类型: 'ZRS', 'LRS'
*/

完整示例请参考:创建存储空间(PHP SDK V2)

C#

要设置存储冗余类型,请创建一个CreateBucketRequest对象并按如下方式配置其属性。

// 准备一个包含存储冗余类型配置的 request 对象
var request = new CreateBucketRequest("your-bucket-name");
request.DataRedundancyType = DataRedundancyType.ZRS;        // 在此处指定存储冗余类型

// 可选存储冗余类型: DataRedundancyType.ZRS, DataRedundancyType.LRS

完整示例请参考:创建存储空间

Node.js

要设置存储冗余类型,请创建一个options对象并将其传递给 putBucket 方法。

// 准备一个包含存储冗余类型配置的 options 对象
const options = {
  dataRedundancyType: 'LRS',    // 在此处指定存储冗余类型
};

// 可选存储冗余类型: 'ZRS', 'LRS'

完整示例请参考:创建存储空间

API

调整 PutBucket 时,通过请求元素 DataRedundancyType 指定Bucket的存储冗余类型。

阻止公共访问

OSS的全局安全策略,用于防止意外的公开授权。开启后只能创建私有权限的Bucket,无法为Bucket设置公共读、公共读写ACL、或公共访问语义的Bucket Policy。OSS控制台默认开启阻止公共访问。如果业务有公共访问需求,可在Bucket创建后手动关闭阻止公共访问,但出于安全考虑不建议关闭。

北京时间2025101310:00:00起,OSS逐步调整所有地域通过API、SDK、ossutil创建Bucket时默认开启阻止公共访问。各个地域的生效变更时间,请参见公告说明

访问权限

决定谁能访问 Bucket 内的数据,默认私有权限,创建后可随时修改。Object默认继承Bucket访问权限,支持单独设置权限

  • 私有(private)- 强烈推荐

    默认且最安全的设置,仅限Bucket所有者或通过 RAM策略、Bucket策略授权的用户访问。建议始终保持此设置,如需授权其他用户访问,请参见权限与访问控制

  • 公共读(public-read)- 谨慎使用

    允许互联网用户直接下载文件,可能导致数据外泄或费用激增。

  • 公共读写(public-read-write)- 强烈不推荐

    允许任意用户访问和修改文件,风险极高,仅限公共资源仓库等特殊场景配置,常规场景严禁使用。

使用OSS控制台

出于安全考虑,OSS 控制台默认开启阻止公共访问,仅支持创建私有权限的Bucket。

如需改为 公共读公共读写,请按以下步骤操作:

  1. 单击目标Bucket名称进入该Bucket。

  2. 在左侧导航栏选择 权限控制 > 阻止公共访问,关闭该策略。

  3. 切换至 读写权限 页签,单击 设置

  4. 按引导修改 Bucket 的读写权限为公共读公共读写

使用ossutil

创建存储空间examplebucket,指定访问权限(ACL)为私有(private)。

ossutil mb oss://examplebucket --acl=private

如果您想了解该命令的更多信息,请参见mb(创建存储空间)

使用OSS SDK

Java

要设置访问权限,请按如下方式配置 CreateBucketRequest 对象。

// 准备一个包含访问权限的请求对象
CreateBucketRequest createBucketRequest = new CreateBucketRequest("your-bucket-name");
createBucketRequest.setCannedACL(CannedAccessControlList.private); // 在此处指定存储空间访问权限

// 可选项: CannedAccessControlList.private, CannedAccessControlList.PublicRead,CannedAccessControlList.PublicReadWrite

完整示例请参考:创建存储空间(Java SDK)

Python

在调用client.put_bucket方法时,通过create_bucket_configuration 参数指定访问权限。

# 准备一个包含访问权限的请求对象
req = oss.PutBucketRequest(
    bucket="your-bucket-name",
    create_bucket_configuration=oss.CreateBucketConfiguration(
        access_control_policy='pricate'  # 在此处指定访问权限
    )
)

# 可选项: 'pricate', 'public-read','public-read-write'

完整示例请参考:创建存储空间(Python SDK V2)

Go

要设置访问权限,请在创建 PutBucketRequest 时配置Acl字段。

// 准备一个包含访问权限等配置的 request 对象
request := &oss.PutBucketRequest{
    Bucket: oss.Ptr("your-bucket-name"),
    Acl:    oss.BucketACLPrivate, // 在此处指定访问权限
    CreateBucketConfiguration: &oss.CreateBucketConfiguration{
    },
}

// 可选访问权限: oss.BucketACLPrivate, oss.BucketACLPublicRead, oss.BucketACLPublicReadWrite

完整示例请参考:创建存储空间(Go SDK V2)

PHP

要设置访问权限,请在创建 PutBucketRequest 时配置Acl字段。

// 准备一个包含访问权限等配置的请求对象
$request = new Oss\Models\PutBucketRequest(
    "your-bucket-name",
    'private', // 在此处指定访问权限 (第二个参数)
    null,      // resourceGroupId
    new Oss\Models\CreateBucketConfiguration(
        'IA',      // 在此处指定存储类型
        'ZRS'      // 在此处指定冗余类型
    )
);

/* 
 * 可选访问权限: 'private', 'public-read', 'public-read-write'
*/

完整示例请参考:创建存储空间(PHP SDK V2)

C#

要设置访问权限,请创建一个CreateBucketRequest对象并按如下方式配置其属性。

// 准备一个包含访问权限配置的 request 对象
var request = new CreateBucketRequest("your-bucket-name");
request.ACL = CannedAccessControlList.private;       // 在此处指定访问权限

// 可选访问权限: CannedAccessControlList.private, CannedAccessControlList.PublicRead,CannedAccessControlList.PublicReadWrite

完整示例请参考:创建存储空间

Node.js

要设置访问权限,请创建一个options对象并将其传递给 putBucket 方法。

// 准备一个包含访问权限的 options 对象
const options = {
  acl: 'private',     // 在此处指定访问权限
};

// 可选访问权限: 'private', 'public-read','public-read-write'

完整示例请参考:创建存储空间

Android

要设置访问权限,请创建一个CreateBucketRequest对象并按如下方式配置。

// 准备一个包含访问权限等配置的 request 对象
CreateBucketRequest createBucketRequest = new CreateBucketRequest("your-bucket-name");
createBucketRequest.setBucketACL(CannedAccessControlList.Private); // 在此处指定访问权限

// 可选访问权限: CannedAccessControlList.Private, CannedAccessControlList.PublicRead,CannedAccessControlList.PublicReadWrite

完整示例请参考:创建存储空间

iOS

要设置访问权限,请创建一个OSSCreateBucketRequest对象并按如下方式配置其属性。

// 准备一个包含访问权限等配置的 request 对象
OSSCreateBucketRequest *create = [OSSCreateBucketRequest new];
create.bucketName = @"your-bucket-name";
create.xOssACL = @"private";    // 在此处指定访问权限

// 可选访问权限: private,public-read, public-read-write 等

完整示例请参考:创建存储空间

API

调用 PutBucket 接口时,通过 x-oss-acl 请求头指定 Bucket 的读写权限。

可选功能配置

可在创建时或创建后按需配置。

  • 版本控制

    防止数据被误删或覆盖。上传同名文件时自动保留历史版本而不是直接覆盖,误操作后可一键恢复。详见版本控制

  • 服务端加密

    自动加密静态数据。OSS在数据写入时加密、读取时解密,建议至少启用“OSS完全托管”。详见服务器端加密

  • 资源组

    适用于多团队协作。可按部门或项目对 Bucket 分组,实现独立的权限管理和成本核算。详见使用资源组

  • 实时日志查询

    开启后可在控制台快速查询和分析访问日志,了解谁在什么时候访问了哪些文件,便于排查异常访问或进行用户行为分析。详见实时日志查询

  • 定时备份

    支持自动化的数据备份。详见Bucket设置定时备份

  • HDFS 服务

    适用于数据湖场景。让 Spark 等大数据框架直接分析 OSS 数据,无需数据搬迁。详见什么是OSS-HDFS服务

  • Bucket标签

    便于批量管理与成本分析。通过键值对标签(如部门:研发)对 Bucket 进行分类。详见管理存储空间标签

常见问题

创建Bucket后可否修改Bucket名称和地域?

不能。名称和地域在创建后均不可修改,请提前规划。如需变更,只能通过数据迁移的方式,将数据从旧Bucket 复制到符合要求的新Bucket。

LRS 类型的存储资源包,是否可以抵扣 ZRS 类型 Bucket 的费用?

不可以。资源包的类型必须与 Bucket 的存储冗余类型严格匹配。LRS 资源包只能抵扣 LRS Bucket 的费用,ZRS 资源包也只能抵扣 ZRS Bucket 的费用,两者不可混用。