示例代码

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

package main

import (
    "fmt"
    "os"
    "strings"
    "time"
"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)
    }

    // 填写Bucket名称,例如examplebucket。
    bucket, err := client.Bucket("examplebucket")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 填写不包含Bucket名称在内的Object的完整路径,例如exampledir/exampleobject.txt。
    objectName := "exampledir/exampleobject.txt"
    var nextPos int64 = 0
    // 第一次追加上传的位置是0,返回值为下一次追加的位置。后续追加的位置是追加前文件的长度。    
    // 指定过期时间。
    expires := time.Date(2021, time.December, 10, 23, 0, 0, 0, time.UTC)
    option := []oss.Option{
        oss.Expires(expires),
        // 指定该Object被下载时的网页缓存行为。
        //oss.CacheControl("no-cache"),
        // 指定该Object被下载时的名称。
        //oss.ContentDisposition("attachment;filename=FileName.txt"),
        // 指定该Object的内容编码格式。
        //oss.ContentEncoding("gzip"),
        // 指定Object的存储类型。
        //oss.ObjectStorageClass(oss.StorageStandard),
        // 指定Object的访问权限。
        //oss.ObjectACL(oss.ACLPrivate),
        // 指定服务器端加密方式。
        //oss.ServerSideEncryption("AES256"),
        // 创建AppendObject时可以添加x-oss-meta-*,继续追加时不可以携带此参数。如果配置以x-oss-meta-*为前缀的参数,则该参数视为元数据。
        //oss.Meta("x-oss-meta-author", "Alice"),
    }


    nextPos, err = bucket.AppendObject(objectName, strings.NewReader("YourObjectAppendValue1"), nextPos,option...)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 如果不是第一次追加上传,可以通过bucket.GetObjectDetailedMeta方法或上次追加返回值的X-Oss-Next-Append-Position的属性,获取追加位置。
    //props, err := bucket.GetObjectDetailedMeta("objectName")
    //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(objectName, strings.NewReader("YourObjectAppendValue2"), nextPos)
    if err != nil {
        fmt.Println("Error:", err,"aaa")
        os.Exit(-1)
    }

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