本文介绍如何使用追加上传。

追加类型的文件(Append Object)暂时不支持copyObject操作。文件不存在时,调用AppendObject会创建一个可追加的文件;文件存在时,调用AppendObject会向文件末尾追加内容。

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

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,返回值为下一次追加的位置。后续追加的位置是追加前文件的长度。
	nextPos, err = bucket.AppendObject("<yourObjectName>", strings.NewReader("YourObjectAppendValue1"), nextPos)
	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)
	}

	// 您可以进行多次Append。
}

第一次追加(即开始位置是0的追加)可以指定文件元信息。后续追加不能指定文件元信息。

	// 第一次追加指定文件元信息。
	nextPos, err = bucket.AppendObject("<yourObjectName>", strings.NewReader("YourObjectValue"), 0, oss.Meta("MyProp", "MyPropVal"))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}