非同期処理 (x-oss-async-process) を使用すると、プログラムは現在のタスクの完了を待たずに他のタスクを実行できます。このトピックでは、C# SDK V2 を使用してドキュメントを非同期に変換する方法について説明します。
注意
このトピックのサンプルコードでは、中国 (杭州) リージョン (cn-hangzhou) を例として使用します。デフォルトでは、パブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスするには、内部エンドポイントを使用します。OSS リージョンとエンドポイント間のマッピングの詳細については、「リージョンとエンドポイント」をご参照ください。
サンプルコード
次のコードは、C# SDK V2 を使用してドキュメントを必要なフォーマットに変換する方法の例を示しています。
using System.Text;
using OSS = AlibabaCloud.OSS.V2; // Alibaba Cloud OSS SDK のエイリアスを作成して、後続の使用を簡素化します。
var region = "cn-hangzhou"; // 必須。バケットが配置されているリージョン。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
var endpoint = null as string; // オプション。OSS へのアクセスに使用されるエンドポイント。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
var bucket = "your bucket name"; // 必須。バケットの名前。
var key = "your object key"; // 必須。変換するオブジェクトの名前。
// OSS SDK のデフォルト構成を読み込みます。構成は、環境変数から認証情報 (AccessKey など) を自動的に読み取ります。
var cfg = OSS.Configuration.LoadDefault();
// ID 検証用の認証情報を取得するために環境変数を使用することを明示的に設定します (フォーマット: OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)。
cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider();
// 構成でバケットのリージョンを設定します。
cfg.Region = region;
// エンドポイントが指定されている場合、デフォルトのエンドポイントが上書きされます。
if(endpoint != null)
{
cfg.Endpoint = endpoint;
}
// 構成情報を使用して OSS クライアントインスタンスを作成します。
using var client = new OSS.Client(cfg);
// 変換されたファイルを保存する宛先バケットを指定します。
var targetBucket = bucket!;
// 変換されたファイルのキーを指定します。区別するために "process-" プレフィックスを追加します。
var targetKey = $"process-{key}";
// ドキュメント変換パラメーターを定義するために、ドキュメント処理スタイル文字列を構築します。
// この構成は、ソース Docx ドキュメントを PNG イメージに変換するためのルールを指定します。
// フォーマットの説明: doc/convert,target_{target_format},source_{source_format}
var style = "doc/convert,target_png,source_docx";
// 宛先バケットの名前を Base64 でエンコードします。
var targetNameBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(targetBucket));
// 宛先オブジェクトのキーを Base64 でエンコードします。
var targetKeyBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(targetKey));
// 完全な処理命令を構築します:
// 1. ドキュメント変換スタイル (doc/convert) を適用します。
// 2. sys/saveas 操作を使用して結果を保存します。
// - b_{Base64 エンコードされたバケット名} は宛先バケットを指定します。
// - o_{Base64 エンコードされたキー} は宛先キーを指定します。
// - /notify は非同期処理モードを有効にします。
var process = $"{style}|sys/saveas,b_{targetNameBase64},o_{targetKeyBase64}/notify";
// AsyncProcessObjectAsync メソッドを呼び出して、ドキュメント変換を実行します。
var result = await client.AsyncProcessObjectAsync(new OSS.Models.AsyncProcessObjectRequest()
{
Bucket = bucket,
Key = key,
Process = process
});
// 結果情報を出力します。
Console.WriteLine("AsyncProcessObject done"); // 操作が完了したことを示します。
Console.WriteLine($"StatusCode: {result.StatusCode}"); // HTTP ステータスコード
Console.WriteLine($"RequestId: {result.RequestId}"); // Alibaba Cloud でのトラブルシューティングに使用されるリクエスト ID。
Console.WriteLine("Response Headers:"); // 応答ヘッダー情報。
result.Headers.ToList().ForEach(x => Console.WriteLine(x.Key + " : " + x.Value)); // すべての応答ヘッダーを走査して出力します。
Console.WriteLine($"ProcessResult: {result.ProcessResult}"); // 処理結果を出力します。リファレンス
非同期処理機能の詳細については、「非同期処理」をご参照ください。
非同期処理の完全なサンプルコードについては、「AsyncProcessObject.cs」をご参照ください。