示例代码
以下代码用于追加上传文件:
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)
}
// 您可以进行多次追加上传操作。
}