追加上传是指通过AppendObject方法在已上传的追加类型文件(Appendable Object)末尾直接追加内容。

注意事项

通过追加上传的方式上传文件时,有如下注意事项:

  • 文件不存在时,调用AppendObject会创建一个可追加类型的文件。
  • 追加类型的文件暂不支持CopyObject操作。

示例代码

以下代码用于追加上传文件:

package main

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

func main() {
    // 创建OSSClient实例。
    client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 获取存储空间。
    bucket, err := client.Bucket("<yourBucketName>")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    var nextPos int64 = 0
    // 第一次追加上传的位置是0,返回值为下一次追加的位置。后续追加的位置是追加前文件的长度。
    // <yourObjectName>填写不包含Bucket名称在内的Object的完整路径,例如example/test.txt。
    nextPos, err = bucket.AppendObject("<yourObjectName>", strings.NewReader("YourObjectAppendValue1"), nextPos)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    
    // 如果不是第一次追加上传,可以通过bucket.GetObjectDetailedMeta方法或上次追加返回值的X-Oss-Next-Append-Position的属性,获取追加位置。
    //props, err := bucket.GetObjectDetailedMeta("<yourObjectName>")
    //if err != nil {
    //    fmt.Println("Error:", err)
    //    os.Exit(-1)
    //}
    //nextPos, err = strconv.ParseInt(props.Get("X-Oss-Next-Append-Position"), 10, 64)
    //if err != nil {
    //    fmt.Println("Error:", err)
    //    os.Exit(-1)
    //}    

    // 第二次追加上传。
    nextPos, err = bucket.AppendObject("<yourObjectName>", strings.NewReader("YourObjectAppendValue2"), nextPos)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 您可以进行多次追加上传操作。
}

有关追加上传的更多信息,请参见AppendObject