非同期処理 (x-oss-async-process) を使用すると、プログラムはタスクの完了を待たずに他のタスクを実行できます。このトピックでは、ドキュメント変換、動画トランスコーディング、動画マージなどのシナリオで OSS SDK for Go V2 を使用して非同期処理を行う方法について説明します。
制限事項
-
このトピックのサンプルコードでは、デフォルトで中国 (杭州) リージョン (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"
"strings"
"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", "", "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 クライアントを作成します。
// 出力ファイルの名前を指定します。
targetKey := "dest.png"
// ドキュメントの処理と変換のためのスタイル文字列を構築します。
animationStyle := "doc/convert,target_png,source_docx" // ソースの .docx ドキュメントを .png 画像に変換するルールを定義します。
// 保存パスと Base64 エンコードされたバケット名およびターゲットオブジェクト名を含む処理命令を構築します。
bucketNameEncoded := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(bucketName)), "=")
targetKeyEncoded := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetKey)), "=")
process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify", animationStyle, bucketNameEncoded, targetKeyEncoded)
// 非同期処理タスクを開始するための AsyncProcessObjectRequest を構築します。
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("failed to asynchronously process object %v", err)
}
log.Printf("async process object result:%#v\n", result)
}
適用シナリオ
関連ドキュメント
-
非同期処理機能の詳細については、「非同期処理」をご参照ください。
-
非同期処理機能の API インターフェイスの詳細については、「AsyncProcessObject」をご参照ください。