非同期処理(x-oss-async-process)を使用すると、プログラムはタスクの完了を待たずに他のタスクを実行できます。 このトピックでは、ドキュメント変換、ビデオトランスコーディング、ビデオマージなどのシナリオで Go V2 用 OSS SDK を使用して非同期処理を実行する方法について説明します。
制限事項
このトピックのサンプルコードでは、デフォルトで中国(杭州)リージョン(ID:
cn-hangzhou)とパブリックエンドポイントを使用しています。 同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。 OSS でサポートされているリージョンとエンドポイントの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。このトピックでは、アクセス認証情報は環境変数から取得されます。 アクセス認証情報を構成する方法については、「アクセス認証情報を構成する」をご参照ください。
メソッド
func (c *Client) AsyncProcessObject(ctx context.Context, request *AsyncProcessObjectRequest, optFns ...func(*Options)) (*AsyncProcessObjectResult, error)リクエストパラメーター
パラメーター | タイプ | 説明 |
ctx | context.Context | リクエストのコンテキスト。リクエストの合計継続時間を指定するために使用できます |
request | *AsyncProcessObjectRequest | 特定のインターフェイスのリクエストパラメーターを指定します。 詳細については、「AsyncProcessObjectRequest」をご参照ください |
optFns | ...func(*Options) | (オプション)インターフェイスレベルの構成パラメーター。 詳細については、「Options」をご参照ください |
戻り値リスト
戻り値名 | タイプ | 説明 |
result | *AsyncProcessObjectResult | インターフェイスの戻り値。 err が nil の場合に有効です。 詳細については、「AsyncProcessObjectResult」をご参照ください |
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(®ion, "region", "", "バケットが配置されているリージョン。")
// コマンドラインパラメーターを使用してバケット名を指定します
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
// コマンドラインパラメーターを使用して変換対象のドキュメントの名前を指定します
flag.StringVar(&objectName, "object", "", "オブジェクトの名前。")
}
func main() {
flag.Parse() // コマンドラインパラメーターを解析します
// リージョンが指定されているかどうかを確認します。 リージョンが指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、リージョンが必要です")
}
// バケット名が指定されているかどうかを確認します。 バケット名が指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、バケット名が必要です")
}
// オブジェクト名が指定されているかどうかを確認します。 オブジェクト名が指定されていない場合は、デフォルトのパラメーターを出力してプログラムを終了します
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、オブジェクト名が必要です")
}
// 構成オブジェクトを作成し、環境変数を認証情報プロバイダーおよび指定されたリージョンとして使用します
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg) // 構成を使用して新しい OSS クライアントを作成します
// 出力ファイルの名前を指定します
targetKey := "dest.png"
// 文字列型の style 変数を作成して、ドキュメント変換パラメーターを格納します
animationStyle := "doc/convert,target_png,source_docx" // ソース Docx ドキュメントを PNG 画像に変換する処理ルールを定義します
// 処理命令を作成します。これには、ストレージパス、Base64 エンコードされたバケット名、およびキャプチャされたフレーム名が含まれます
bucketNameEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
targetKeyEncoded := base64.URLEncoding.EncodeToString([]byte(targetKey))
process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify", animationStyle, bucketNameEncoded, targetKeyEncoded)
// AsyncProcessObject リクエストを作成して、特定のオブジェクトの非同期処理を開始します
request := &oss.AsyncProcessObjectRequest{
Bucket: oss.Ptr(bucketName), // 操作対象のバケット名を指定します
Key: oss.Ptr(objectName), // 処理対象のドキュメントの名前を指定します
AsyncProcess: oss.Ptr(process), // 非同期処理命令を指定します
}
// リクエストを実行してオブジェクトを非同期に処理し、戻り結果を受信します
result, err := client.AsyncProcessObject(context.TODO(), request)
if err != nil {
log.Fatalf("オブジェクトの非同期処理に失敗しました %v", err)
}
log.Printf("非同期処理オブジェクトの結果:%#v\n", result)
}
一般的なシナリオ
関連情報
非同期処理機能の詳細については、「非同期処理」をご参照ください。
非同期処理機能の API インターフェースの詳細については、「AsyncProcessObject」をご参照ください。