AppendObject操作を呼び出して、既存の追加可能オブジェクトにコンテンツを追加できます。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba Cloudサービスを使用してOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSでサポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。
追加アップロードを使用するには、
oss:PutObject
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。コンテンツを追加するオブジェクトが存在しない場合、AppendObject操作を呼び出すと追加可能なオブジェクトが作成されます。
コンテンツを追加するオブジェクトが存在する場合:
オブジェクトが追加可能なオブジェクトであり、追加操作が開始される指定された位置が現在のオブジェクトサイズに等しい場合、データはオブジェクトの最後に追加されます。
オブジェクトが追加可能オブジェクトであり、追加操作の開始位置が現在のオブジェクトサイズと等しくない場合、PositionNotEqualToLengthエラーが返されます。
オブジェクトが追加可能オブジェクトでない場合、ObjectNotAppendableエラーが返されます。
CopyObject操作は、追加可能なオブジェクトでは実行できません。
サンプルコード
次のサンプルコードは、追加アップロードの実行方法の例を示しています。
パッケージメイン
import (import (import)
"fmt"
"os"
"strings"
「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)
}
// Create an OSSClient instance.
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。
client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// バケットの名前を指定します。 例: examplebucket.
bucket, err := client.Bucket("examplebucket")
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。
objectName := "exampledir/exampleobject.txt"
var nextPos int64 = 0
// オブジェクトが初めて追加された場合、追加操作の開始位置は0です。 次の追加操作の位置は、応答に含まれる。 次の追加操作が開始される位置は、オブジェクトの現在の長さである。
// リクエストの有効期限を指定します。
有効期限:= time.Date(2021, time.December, 10, 23, 0, 0, 0, time.UTC)
option := []oss. オプション {
oss.Expires(expires),
// オブジェクトのダウンロード時のwebページのキャッシュ動作を指定します。
// oss.CacheControl("no-cache") 、
// ダウンロードされたときのオブジェクトの名前を指定します。
// oss.ContentDisposition("attachment;filename=FileName.txt") 、
// オブジェクトのコンテンツエンコーディング形式を指定します。
// oss.ContentEncoding("gzip") 、
// オブジェクトのストレージクラスを指定します。
// oss.ObjectStorageClass(oss.StorageStandard) 、
// オブジェクトのACLを指定します。
// oss.ObjectACL(oss. ACLDrivate) 、
// サーバー側の暗号化方法を指定します。
// 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)
}
// オブジェクトにコンテンツを追加した場合、次のいずれかのメソッドを使用して、現在の追加操作の開始位置を取得できます。X-Oss-Next-append-position最後の追加操作とbucket.
// 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)
//}
// 2番目の追加操作を実行します。
nextPos, err = bucket.AppendObject(objectName, strings.NewReader("YourObjectAppendValue2"), nextPos)
if err! =nil {
fmt.Println("Error:", err,"aaa")
os.Exit(-1)
}
// オブジェクトに対して追加操作を複数回実行できます。
}
参考資料
追加アップロードの実行に使用される完全なサンプルコードについては、『GitHub』をご参照ください。
追加アップロードのAPI操作の詳細については、「AppendObject」をご参照ください。