同期処理 (`x-oss-process`) では、プログラムはタスクが完了するまで待機してから、他のタスクに進む必要があります。このトピックでは、OSS SDK for C# V2 を使用して同期イメージ処理を実行する方法について説明します。
注意事項
このトピックのサンプルコードでは、中国 (杭州) リージョン (リージョン ID: cn-hangzhou) を例として使用します。デフォルトでは、パブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS がサポートするリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
サンプルコード
次のコードは、OSS SDK for C# 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}";
// イメージ処理ルールを設定します: イメージを 100 × 100 ピクセルの固定サイズにスケーリングします。
var style = "image/resize,m_fixed,w_100,h_100";
// 宛先ストレージ情報を Base64 でエンコードします。
var targetNameBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(targetBucket));
var targetKeyBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(targetKey));
// 完全な処理命令を構築します: イメージをスケーリングし、指定された場所に保存します。
var process = $"{style}|sys/saveas,o_{targetKeyBase64},b_{targetNameBase64}";
// ProcessObjectAsync メソッドを呼び出して、イメージ処理を実行し、結果を保存します。
var result = await client.ProcessObjectAsync(new OSS.Models.ProcessObjectRequest()
{
Bucket = bucket,
Key = key,
Process = process
});
// 結果情報を出力します。
Console.WriteLine("ProcessObject done"); // 操作は完了です。
Console.WriteLine($"StatusCode: {result.StatusCode}"); // HTTP ステータスコード。
Console.WriteLine($"RequestId: {result.RequestId}"); // リクエスト ID。Alibaba Cloud が問題をトラブルシューティングするために使用します。
Console.WriteLine("Response Headers:"); // 応答ヘッダー。
result.Headers.ToList().ForEach(x => Console.WriteLine(x.Key + " : " + x.Value)); // すべての応答ヘッダーを走査して出力します。参考資料
詳細については、「イメージ処理パラメーター」をご参照ください。
同期処理機能の詳細については、「同期処理」をご参照ください。
同期処理の完全なサンプルコードについては、「ProcessObject.cs」をご参照ください。