创建桶

Bucket是用于存储对象(Object)的容器,所有的对象都必须隶属于某个Bucket。本文介绍如何创建桶(Bucket)。

  • CreateBucket

CreateBucket操作用于创建bucket,每个用户可以拥有多个bucket。Bucket的名称在媒体存储范围内必须是全局唯一的,一旦创建之后无法修改名称。Bucket的创建者默认是bucket的拥有者,对bucket拥有FULL_CONTROL权限,可以通过设置参数的方式为其他用户配置创建bucket的权限。bucket的命名规范如下:

  • 只能使用小写字母、数字和短横线(-);

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

  • 长度必须在3-63字节之间。

代码示例:

// 创建一个桶
func CreateBucket(svc *s3.S3) {
    bucketName := "exampleBucket"
    // 创建桶
    createBucketInput := &s3.CreateBucketInput{
        Bucket: aws.String(bucketName),
    }
    createBucketOutput, err := svc.CreateBucket(createBucketInput)
    if err != nil {
        fmt.Printf("Unable to create bucket %s, %v\n", bucketName, err)
    }
    // 等待桶创建
    fmt.Printf("Waiting for bucket %s to be created...\n", bucketName)
    err = svc.WaitUntilBucketExists(&s3.HeadBucketInput{
        Bucket: aws.String(bucketName),
    })
    if err != nil {
        fmt.Printf("Error occurred while waiting for bucket to be created, %v", createBucketOutput)
    }

    fmt.Printf("Bucket %s successfully created\n", bucketName)
}

CreateBucketInput可设置的参数如下:

参数 类型 说明 是否必要
ACL *string 配置创建bucket预定义的标准ACL信息,例如private,public-read等。
Bucket *string 创建bucket的名称。
GrantFullControl *string 用于自定义用户对此bucket的READ、WRITE、READ_ACP、WRITE_ACP权限信息。
GrantRead *string 用于自定义用户对此bucket的READ权限信息。
GrantReadACP *string 用于自定义用户对此bucket的READ_ACP权限信息。
GrantWrite *string 用于自定义用户对此bucket的WRITE权限信息。
GrantWriteACP *string 用于自定义用户对此bucket的WRITE_ACP权限信息。
  • CreateBucketRequest

CreateBucketRequest操作首先生成一个"request.Request"对象,该对象是一个执行CreateBucket操作的请求。通过调用Request对象的Send方法完成创建bucket的操作。该方法可以生成定制化的请求,例如自定义请求头部请求超时重试设置。

代码示例:

func CreateBucketRequest(svc *s3.S3) {
    createBucketInput := &s3.CreateBucketInput{
        Bucket: aws.String("exampleBucket"),
    }
    req, resp := svc.CreateBucketRequest(createBucketInput)

    err := req.Send()
    if err != nil {
        fmt.Printf("fail to create bucket. %v\n", err)
    } else {
        fmt.Println(resp)
    }
}

 响应结果:

HTTP状态 响应码 描述
200 Success 操作成功。
400 InvalidBucketName 创建桶的名字不合法。
403 AccessDenied 用户没有权限执行操作。
409 BucketAlreadyExists 当前创建的桶的名字已经被其他用户使用。