如何创建存储空间

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

在上传文件(Object)到OSS之前,您需要创建一个用于存储文件的存储空间(Bucket)。存储空间具有各种配置属性,包括访问权限、存储类型等。您可以根据实际需求,创建不同类型的存储空间来存储不同的数据。

注意事项

  • 创建存储空间本身不收取任何费用,仅收取上传至存储空间中Object的存储费用或者访问Object产生的流量费用等。更多信息,请参见计量项和计费项

  • 存储空间的容量弹性扩展,您无需提前购买容量。

使用限制

  • 同一阿里云账号在同一地域内创建的存储空间总数不能超过100个。

  • 存储空间创建后,其名称、所处地域、存储类型不支持修改。

  • 单个存储空间的容量不受限制。

操作步骤

使用OSS控制台

您可以创建有地域属性Bucket或者无地域属性Bucket。关于存储空间地域属性的更多信息,请参见存储空间地域属性

创建有地域属性Bucket

  1. 登录OSS管理控制台

  2. 在左侧导航栏,单击Bucket 列表然后单击创建 Bucket

  3. 创建 Bucket面板,按如下说明配置各项参数。

    参数

    描述

    Bucket名称

    填写Bucket名称。命名规则如下:

    • Bucket名称在OSS范围内必须全局唯一。

    • 只能包括小写字母、数字和短划线(-)。

    • 必须以小写字母或者数字开头和结尾。

    • 长度必须在3~63字符之间。

    地域

    Bucket的数据中心。

    您需要下拉选择有地域属性,然后指定某个地域。

    如需通过ECS内网访问OSS,请选择与您ECS相同的地域。更多信息,请参见 OSS访问域名使用规则

    Endpoint

    Bucket所在地域对应的外网Endpoint。更多Endpoint,请参见OSS访问域名、数据中心、开放端口

    存储类型

    Bucket的存储类型。

    • 标准存储提供高可靠、高可用、高性能的对象存储服务,能够支持频繁的数据访问。适用于各种社交、分享类的图片、音视频应用、大型网站、大数据分析等业务场景。

    • 低频访问存储提供高持久性、较低存储成本的对象存储服务。有最小计量单位(64 KB)和最低存储时间(30天)的要求。支持数据实时访问,访问数据时会产生数据取回费用。适用于较低访问频率(平均每月访问频率1到2次)的业务场景。

    • 归档存储提供高持久性、极低存储成本的对象存储服务。有最小计量单位(64 KB)和最低存储时间(60天)的要求。数据需解冻(约1分钟)后访问,会产生数据解冻费用。如果开启归档直读,无需解冻就可以访问数据,会产生数据直读取回费用。适用于数据长期保存的业务场景,例如档案数据、医疗影像、科学资料、影视素材等。

    • 冷归档存储提供高持久性、比归档存储的存储成本更低的对象存储服务。有最小计量单位(64 KB)和最低存储时间(180天)的要求。数据需解冻后访问,解冻时间根据数据大小和选择的解冻模式决定,解冻会产生数据取回费用以及取回请求费用。适用于需要超长时间存放的冷数据,例如因合规要求需要长期留存的数据、大数据及人工智能领域长期积累的原始数据、影视行业长期留存的媒体资源、在线教育行业的归档视频等业务场景。

    • 深度冷归档存储提供高持久性、比冷归档存储成本更低的对象存储服务。有最小计量单位(64 KB)和最低存储时间(180天)的要求。数据需解冻后访问,解冻时间根据数据大小和选择的解冻模式决定,解冻会产生数据取回费用以及取回请求费用。适用于需要超长时间存放的极冷数据,例如大数据及人工智能领域的原始数据的长期积累留存、媒体数据的长期保留、法规和合规性存档、磁带替换等业务场景。

    更多信息,请参见存储类型介绍

    存储冗余类型

    Bucket的数据容灾类型。

    • 本地冗余存储

      采用单可用区(AZ)内的数据冗余存储机制,将用户的数据冗余存储在同一个可用区内多个设施的多个设备上,确保硬件失效时的数据持久性和可用性。

    • 同城冗余存储(推荐)

      采用多可用区(AZ)内的数据冗余存储机制,将用户的数据冗余存储在同一地域(Region)的多个可用区。当某个可用区不可用时,仍然能够保障数据的正常访问。

      重要

      同城冗余存储的费用较高,且开启后不支持关闭,请谨慎操作。

      更多信息,请参见同城冗余存储

    阻止公共访问

    开启阻止公共访问,已有的公共访问权限会被忽略,且不允许创建新的公共访问权限,以此关闭数据的公开访问渠道,确保数据安全。更多信息,请参见阻止公共访问

    读写权限

    选择Bucket的读写权限。

    • 私有:只有该存储空间的拥有者可以对该存储空间内的文件进行读写操作,其他人无法访问该存储空间内的文件。

    • 公共读:只有该存储空间的拥有者可以对该存储空间内的文件进行写操作,任何人(包括匿名访问者)可以对该存储空间中的文件进行读操作。

      警告

      互联网上任何用户都可以对该Bucket内文件进行访问,这有可能造成您数据的外泄以及费用激增,请谨慎操作。

    • 公共读写:任何人(包括匿名访问者)都可以对该存储空间内文件进行读写操作。

      警告

      互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可能会侵害您的合法权益。除特殊场景外,不建议您配置公共读写权限。

    所属资源组

    选择Bucket所属资源组。资源组对您拥有的云资源从用途、权限、归属等维度上进行分组,实现企业内部多用户、多项目的资源分级管理。更多信息,请参见资源组概述

    版本控制

    选择是否开通版本控制功能。

    • 开通:开通Bucket版本控制功能后,针对数据的覆盖和删除操作将会以历史版本的形式保存下来。当您在错误覆盖或者删除Object后,能够将Bucket中存储的Object恢复至任意时刻的历史版本。更多详情请参见版本控制介绍

    • 不开通:不开通版本控制功能,则不保存覆盖或删除的数据。

    服务端加密方式

    选择Object的加密方式。

    • :不启用服务器端加密。

    • OSS完全托管:使用OSS托管的密钥进行加密。OSS会为每个Object使用不同的密钥进行加密,作为额外的保护,OSS会使用主密钥对加密密钥本身进行加密。

    • KMS:使用KMS默认托管的CMK或指定CMK ID进行加解密操作。

      使用KMS加密方式前,需要开通KMS服务。具体操作,请参见开通密钥管理服务

    • 加密算法可选择AES256或SM4加密算法。

    • 加密密钥服务端加密方式选择KMS时,可配置此项。参数说明如下:

      • alias/acs/oss(CMK ID):使用默认托管的CMK生成不同的密钥来加密不同的Object,并且在Object被下载时自动解密。

      • alias/<cmkname>(CMK ID):使用指定的CMK生成不同的密钥来加密不同的Object,并将加密Object的CMK ID记录到Object的元数据中,具有解密权限的用户下载Object时会自动解密。其中<cmkname>为创建密钥时配置的主密钥可选标识。

        使用指定的CMK ID前,您需要在KMS管理控制台创建一个与Bucket处于相同地域的普通密钥或外部密钥。具体操作,请参见创建密钥

    实时日志查询

    如果您希望在不付费的情况下实时查询最近7天的OSS访问日志,请开通实时日志查询。

    有关实时日志查询的更多信息,请参见实时日志查询

    如果您不需要进行实时日志查询,请保持不开通的默认配置。

    定时备份

    如果您希望定时备份您的OSS数据,请开通定时备份。此时,OSS将自动创建备份计划,并由云备份(Cloud Backup)执行备份频率为每天备份一次OSS数据,备份文件保存一周的任务。更多信息,请参见定时备份

    如果您不需要定时备份您的OSS数据,请保持不开通的默认配置。

    HDFS服务

    如果您希望通过JindoSDK访问OSS实现数据湖场景,需要开通HDFS服务。开通HDFS功能前,需要打开开关,并按照页面指引完成授权操作。更多信息,请参见开通OSS-HDFS服务

    重要
    • HDFS服务开启后不支持关闭,请谨慎操作。

    • 归档以及冷归档存储类型Bucket不支持开启HDFS服务。

创建无地域属性Bucket

重要
  • 无地域属性Bucket仅支持外网访问,不支持内网访问。更多信息,请参见无地域属性Bucket

  • 建议您在创建无地域属性Bucket之前,及时购买无地域属性预留空间,否则将以按量付费的方式对无地域属性Bucket存放的资源进行收费。更多信息,请参见无地域属性预留空间

  1. 登录OSS管理控制台

  2. 在左侧导航栏,单击Bucket 列表然后单击创建 Bucket

  3. 创建 Bucket面板,按如下说明配置各项参数。

    参数

    描述

    Bucket名称

    填写Bucket名称。命名规则如下:

    • Bucket名称在OSS范围内必须全局唯一。

    • 只能包括小写字母、数字和短划线(-)。

    • 必须以小写字母或者数字开头和结尾。

    • 长度必须在3~63字符之间。

    地域

    Bucket的数据中心。

    您需要下拉选择无地域属性

    Endpoint

    仅支持外网Endpoint。固定值为oss-rg-china-mainland.aliyuncs.com

    存储类型

    Bucket的存储类型。

    仅支持标准存储。标准存储提供高可靠、高可用、高性能的对象存储服务,能够支持频繁的数据访问。适用于各种社交、分享类的图片、音视频应用、大型网站、大数据分析等业务场景。

    存储冗余类型

    Bucket的数据容灾类型。

    仅支持本地冗余存储。本地冗余存储采用单可用区(AZ)内的数据冗余存储机制,将用户的数据冗余存储在同一个可用区内多个设施的多个设备上,确保硬件失效时的数据持久性和可用性。

    阻止公共访问

    开启阻止公共访问,已有的公共访问权限会被忽略,且不允许创建新的公共访问权限,以此关闭数据的公开访问渠道,确保数据安全。更多信息,请参见阻止公共访问

    读写权限

    选择Bucket的读写权限。

    • 私有:只有该存储空间的拥有者可以对该存储空间内的文件进行读写操作,其他人无法访问该存储空间内的文件。

    • 公共读:只有该存储空间的拥有者可以对该存储空间内的文件进行写操作,任何人(包括匿名访问者)可以对该存储空间中的文件进行读操作。

      警告

      互联网上任何用户都可以对该Bucket内文件进行访问,这有可能造成您数据的外泄以及费用激增,请谨慎操作。

    • 公共读写:任何人(包括匿名访问者)都可以对该存储空间内文件进行读写操作。

      警告

      互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可能会侵害您的合法权益。除特殊场景外,不建议您配置公共读写权限。

    版本控制

    选择是否开通版本控制功能。

    选择是否开启服务器端加密。

    • 开通:开通Bucket版本控制功能后,针对数据的覆盖和删除操作将会以历史版本的形式保存下来。当您在错误覆盖或者删除Object后,能够将Bucket中存储的Object恢复至任意时刻的历史版本。更多详情请参见版本控制介绍

    • 不开通:不开通版本控制功能,则不保存覆盖或删除的数据。

    服务端加密方式

    选择Object的加密方式。

    • :不启用服务器端加密。

    • OSS完全托管:使用OSS托管的密钥进行加密。OSS会为每个Object使用不同的密钥进行加密,作为额外的保护,OSS会使用主密钥对加密密钥本身进行加密。

    • 加密算法:选择AES256或SM4加密算法。

使用图形化管理工具ossbrowser

ossbrowser支持的Bucket级别的操作与控制台支持的操作类似,请按照ossbrowser界面指引完成创建Bucket的操作。关于如何使用ossbrowser,请参见快速使用ossbrowser

使用阿里云SDK

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

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
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****";


        // 创建OSSClient实例。
        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();
            }
        }
    }
}
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;

// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
$provider = new EnvironmentVariableCredentialsProvider();
// Endpoint以杭州为例,其它Region请按实际情况填写。
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 填写Bucket名称,例如examplebucket。
$bucket= "examplebucket";
try {
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
    );
    $ossClient = new OssClient($config);
    // 设置Bucket的存储类型为低频访问类型,默认是标准类型。
    $options = array(
        OssClient::OSS_STORAGE => OssClient::OSS_STORAGE_IA
    );
    // 设置Bucket的读写权限为公共读,默认是私有读写。
    $ossClient->createBucket($bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ, $options);
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . ": OK" . "\n");        
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
});

// 创建存储空间。
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();        
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

# 创建存储空间。
# 如果需要在创建存储空间时设置存储类型、存储空间访问权限、数据容灾类型,请参考以下代码。
# 以下以配置存储空间为标准存储类型,访问权限为私有,数据容灾类型为同城冗余存储为例。
# bucketConfig = oss2.models.BucketCreateConfig(oss2.BUCKET_STORAGE_CLASS_STANDARD, oss2.BUCKET_DATA_REDUNDANCY_TYPE_ZRS)
# bucket.create_bucket(oss2.BUCKET_ACL_PRIVATE, bucketConfig)
bucket.create_bucket()
using Aliyun.OSS;

// 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";

// 初始化OssClient实例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
// 创建存储空间。
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);
    }
// 构建创建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());
        }
    }
});
package main

    import (
        "fmt"
        "os"
        "github.com/aliyun/aliyun-oss-go-sdk/oss"
    )

func main() {
    /// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 创建OSSClient实例。
    // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 创建名为examplebucket的存储空间,并设置存储类型为低频访问oss.StorageIA、读写权限ACL为公共读oss.ACLPublicRead、数据容灾类型为同城冗余存储oss.RedundancyZRS。
    err = client.CreateBucket("examplebucket", oss.StorageClass(oss.StorageIA), oss.ACL(oss.ACLPublicRead), oss.RedundancyType(oss.RedundancyZRS))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
}
// 构建创建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 <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";
    /*填写Bucket名称,例如examplebucket。*/
    std::string BucketName = "examplebucket";

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

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

    /*指定新创建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;
}
#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";

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"));
    /* 是否使用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;
}
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')

使用命令行工具ossutil

关于使用ossutil创建存储空间的具体步骤, 请参见mb(创建存储空间)

使用REST API

如果您的程序自定义要求较高,您可以直接发起REST API请求。直接发起REST API请求需要手动编写代码计算签名。更多信息,请参见PutBucket

更多参考

  • 文件管理

    • 上传文件

      存储空间创建完成后,您可以向该存储空间上传文件。关于上传文件的具体操作,请参见简单上传

    • 下载文件

      文件上传完成后,您可以将文件下载至浏览器默认路径或本地指定路径。关于下载文件的具体操作,请参见简单下载

    • 分享文件

      您还可以将文件URL分享给第三方,供其下载或预览。关于分享文件的具体操作,请参见控制台分享文件

  • 权限控制

    默认情况下,为保证存储在OSS中数据的安全性,OSS资源默认为私有权限,只有资源拥有者或者被授权的用户允许访问。如果要授权第三方用户访问或使用自己的OSS资源,可以通过多种权限控制策略向他人授予资源的特定权限。关于访问控制的更多信息,请参见访问控制概述