追加上传是指通过AppendObject方法在已上传的追加类型文件(Appendable Object)末尾直接追加内容。
使用限制
通过追加上传的方式上传文件时,有如下限制:
- 如果文件不存在,则调用AppendObject接口会创建一个可追加类型的文件。
- 如果文件已存在,且为可追加类型文件时,若设置的追加位置和文件当前长度不等,则抛出PositionNotEqualToLength异常。如果文件已存在,且为不可追加类型文件时,则抛出ObjectNotAppendable异常。
- 追加类型的文件暂不支持CopyObject操作。
有关追加上传的更多信息,请参见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,返回值为下一次追加的位置。后续追加的位置是追加前文件的长度。
// <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)
}
// 您可以进行多次追加上传操作。
}
有关Bucket名称命名规范的更多信息,请参见存储空间(Bucket)。有关Object名称命名规范的更多信息,请参见对象(Object)。