すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:同期処理 (Go SDK V2)

最終更新日:Nov 09, 2025

同期処理 (x-oss-process) では、プログラムはタスクが完了するのを待ってから他のタスクを実行する必要があります。この Topic では、イメージ処理やドキュメント処理などのシナリオで Go SDK V2 を使用して同期処理を行う方法について説明します。

使用方法

  • この Topic のサンプルコードでは、中国 (杭州) リージョン (リージョン ID: cn-hangzhou) を例として使用します。デフォルトでは、パブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud プロダクトから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS がサポートするリージョンとエンドポイント間のマッピングの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。

  • この Topic では、環境変数からアクセス資格情報を取得する例を示します。アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。

メソッド定義

func (c *Client) ProcessObject(ctx context.Context, request *ProcessObjectRequest, optFns ...func(*Options)) (*ProcessObjectResult, error)

リクエストパラメーター

パラメーター

タイプ

説明

ctx

context.Context

リクエストのコンテキスト。このパラメーターを使用して、リクエストの合計タイムアウト期間を指定できます。

request

*ProcessObjectRequest

特定の API 操作のリクエストパラメーター。詳細については、「ProcessObjectRequest」をご参照ください。

optFns

...func(*Options)

(オプション) 操作レベルの構成パラメーター。詳細については、「Options」をご参照ください。

戻り値

戻り値

タイプ

説明

result

*ProcessObjectResult

API 操作の戻り値。このパラメーターは、err が nil の場合にのみ有効です。詳細については、「ProcessObjectResult」をご参照ください。

err

error

リクエストのステータス。リクエストが失敗した場合、err は nil ではありません。

サンプルコード

次のサンプルコードは、Go SDK V2 を使用してイメージをスケーリングし、処理されたイメージを指定されたバケットに保存する方法を示しています。

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
	objectName string
)

// init 関数は、main 関数の前に実行され、プログラムを初期化します。
func init() {
	// リージョンを指定するためのコマンドラインパラメーターを設定します。
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	// バケット名を指定するためのコマンドラインパラメーターを設定します。
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	// 処理するイメージの名前を指定するためのコマンドラインパラメーターを設定します。
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	flag.Parse() // コマンドラインパラメーターを解析します。

	// リージョン情報が提供されているかどうかを確認します。提供されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}
	// バケット名が提供されているかどうかを確認します。提供されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}
	// オブジェクト名が提供されているかどうかを確認します。提供されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// 構成オブジェクトを作成し、資格情報プロバイダーとして環境変数と指定されたリージョンを使用します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // 構成を使用して新しい OSS クライアントを作成します。

	// 処理されたイメージを保存するために使用されるバケットの名前を指定します。バケットは、ソースイメージを保存するバケットと同じリージョンにある必要があります。
	targetBucketName := bucketName
	// 処理されたイメージの名前を指定します。イメージがバケットのルートディレクトリにない場合は、exampledir/example.jpg のように、ファイルの完全なパスを含める必要があります。
	targetImageName := "exampledir/example.jpg"
	// イメージを幅と高さが 100 px の固定サイズに変更し、指定されたバケットに保存します。
	style := "image/resize,m_fixed,w_100,h_100"
	process := fmt.Sprintf("%s|sys/saveas,o_%v,b_%v", style, base64.URLEncoding.EncodeToString([]byte(targetImageName)), base64.URLEncoding.EncodeToString([]byte(targetBucketName)))

	// 特定のオブジェクトの同期処理を開始するために ProcessObjectRequest を構築します。
	request := &oss.ProcessObjectRequest{
		Bucket:  oss.Ptr(bucketName), // 操作対象のバケットの名前を指定します。
		Key:     oss.Ptr(objectName), // 処理するイメージの名前を指定します。
		Process: oss.Ptr(process),    // 処理命令を指定します。
	}

	// リクエストを実行してオブジェクトを同期的に処理し、戻り値を受け取ります。
	result, err := client.ProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to process object %v", err)
	}

	log.Printf("process object result:%#v\n", result)
}

シナリオ

イメージにブラインドウォーターマークを追加する

ブラインドウォーターマーク機能を使用して、イメージにテキストのブラインドウォーターマークを追加できます。

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
	objectName string
)

// init 関数は、main 関数の前に実行され、プログラムを初期化します。
func init() {
	// リージョンを指定するためのコマンドラインパラメーターを設定します。デフォルト値は空の文字列です。
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	// バケット名を指定するためのコマンドラインパラメーターを設定します。デフォルト値は空の文字列です。
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	// 処理するイメージの名前を指定するためのコマンドラインパラメーターを設定します。
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	flag.Parse() // コマンドラインパラメーターを解析します。

	// リージョン情報が提供されているかどうかを確認します。提供されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}
	// バケット名が提供されているかどうかを確認します。提供されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}
	// オブジェクト名が提供されているかどうかを確認します。提供されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// 構成オブジェクトを作成し、資格情報プロバイダーとして環境変数と指定されたリージョンを使用します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // 構成を使用して新しい OSS クライアントを作成します。

	// ウォーターマークのコンテンツを指定します。
	content := "Copyright Alibaba Cloud"

	// イメージのブラインドウォーターマークを生成します。
	encodedContent := base64.URLEncoding.EncodeToString([]byte(content))
	style := fmt.Sprintf("image/blindwatermark,content_%s", encodedContent)
	targetImageName := "targetDir/target.jpg"
	process := fmt.Sprintf("%s|sys/saveas,o_%s,b_%s", style, base64.URLEncoding.EncodeToString([]byte(targetImageName)), base64.URLEncoding.EncodeToString([]byte(bucketName)))

	// 特定のオブジェクトの同期処理を開始するために ProcessObjectRequest を構築します。
	request := &oss.ProcessObjectRequest{
		Bucket:  oss.Ptr(bucketName), // 操作対象のバケットの名前を指定します。
		Key:     oss.Ptr(objectName), // 処理するオブジェクトの名前を指定します。
		Process: oss.Ptr(process),    // 処理命令を指定します。
	}

	// リクエストを実行してオブジェクトを同期的に処理し、戻り値を受け取ります。
	result, err := client.ProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to process object %v", err)
	}

	log.Printf("process object result:%#v\n", result)
}

参照

  • イメージ処理パラメーターの詳細については、「イメージ処理パラメーター」をご参照ください。

  • 同期処理機能の詳細については、「同期処理」をご参照ください。

  • 同期処理機能の詳細については、「ProcessObject」 API 操作をご参照ください。