Object Storage Service (OSS) では、オブジェクトタグを設定してオブジェクトを分類できます。このトピックでは、PHP 2.0 向け OSS SDK を使用してオブジェクトのタグを設定する方法について説明します。
使用上の注意
このトピックのサンプルコードでは、中国 (杭州) リージョンのリージョン ID
cn-hangzhouを使用しています。デフォルトでは、パブリックエンドポイントを使用してバケット内のリソースにアクセスします。バケットが配置されているのと同じリージョン内の他の Alibaba Cloud サービスを使用してバケット内のリソースにアクセスする場合は、内部エンドポイントを使用します。 OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。オブジェクトのタグを設定するには、
oss:PutObjectTagging権限が必要です。詳細については、「RAM ユーザーにカスタムポリシーをアタッチする」をご参照ください。
オブジェクトのアップロード時にタグを設定する
シンプルアップロードを使用してオブジェクトをアップロードするときにタグを設定する
次のサンプルコードは、シンプルアップロードを使用してオブジェクトをアップロードするときに、オブジェクトのタグを設定する方法の例を示しています。
<?php
// 依存ライブラリを読み込むために、autoload ファイルを導入します。
require_once __DIR__ . '/../../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// コマンドラインパラメータの説明を指定します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (オプション) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
"bucket" => ['help' => 'バケットの名前。', 'required' => True], // (必須) バケットの名前を指定します。
"key" => ['help' => 'オブジェクトの名前。', 'required' => True], // (必須) オブジェクトの名前を指定します。
];
// パラメータの説明を、getopt で必要な長いオプションリストに変換します。
$longopts = \array_map(function ($key) {
return "$key:"; // 各パラメータの末尾にコロン (:) を追加して、値が必要であることを示します。
}, array_keys($optsdesc));
// コマンドラインパラメータを解析します。
$options = getopt("", $longopts);
// 必須パラメータが設定されているかどうかを確認します。
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help']; // パラメータに関するヘルプ情報を取得します。
echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
exit(1); // 必須パラメータが設定されていない場合は、プログラムを終了します。
}
}
// 解析されたパラメータから値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
$key = $options["key"]; // オブジェクトの名前。
// 環境変数からアクセス認証情報を取得します。
// EnvironmentVariableCredentialsProvider 環境変数から AccessKey ID と AccessKey シークレットを取得します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証プロバイダーを指定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを指定します。
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // エンドポイントが提供されている場合は、エンドポイントを指定します。
}
// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);
// アップロードするコンテンツを指定します。
$data = 'Hello OSS';
// PutObjectRequest オブジェクトを作成して、オブジェクトをアップロードします。
$request = new Oss\Models\PutObjectRequest(
bucket: $bucket,
key: $key,
tagging: "key1=value1&key2=value2"); // タグ情報を指定します。
$request-> body=Oss\Utils::streamFor($data); // HTTP リクエストボディのデータがバイナリ ストリームであることを指定します。
// シンプルアップロード操作を実行します。
$result = $client->putObject($request);
// アップロード結果を表示します。
printf(
'status code: %s' . PHP_EOL . // HTTP ステータスコード。
'request id: %s' . PHP_EOL . // リクエスト ID。
'etag: %s' . PHP_EOL, // オブジェクトの ETag。
$result->statusCode,
$result->requestId,
$result->etag
);
マルチパートアップロードを使用してオブジェクトをアップロードするときにタグを設定する
次のサンプルコードは、マルチパートアップロードを使用してオブジェクトをアップロードするときに、オブジェクトのタグを設定する方法の例を示しています。
<?php
// 依存ライブラリを読み込むために、autoload ファイルを導入します。
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// コマンドラインパラメータの説明を指定します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (オプション) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
"bucket" => ['help' => 'バケットの名前。', 'required' => True], // (必須) バケットの名前を指定します。
"key" => ['help' => 'オブジェクトの名前。', 'required' => True], // (必須) オブジェクトの名前を指定します。
];
// パラメータの説明を、getopt で必要な長いオプションリストに変換します。
// 各パラメータの末尾にコロン (:) を追加して、値が必要であることを示します。
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// コマンドラインパラメータを解析します。
$options = getopt("", $longopts);
// 必須パラメータが設定されているかどうかを確認します。
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help']; // パラメータに関するヘルプ情報を取得します。
echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
exit(1); // 必須パラメータが設定されていない場合は、プログラムを終了します。
}
}
// 解析されたパラメータから値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
$key = $options["key"]; // オブジェクトの名前。
// 環境変数からアクセス認証情報を取得します。
// EnvironmentVariableCredentialsProvider 環境変数から AccessKey ID と AccessKey シークレットを取得します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証プロバイダーを指定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを指定します。
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // エンドポイントが提供されている場合は、エンドポイントを指定します。
}
// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);
// マルチパートアップロードタスクを開始するためのリクエストを作成します。
$request = new Oss\Models\InitiateMultipartUploadRequest(
bucket: $bucket,
key: $key,
tagging:" key1=value1&key2=value2");
$result = $client->initiateMultipartUpload($request);
// マルチパートアップロードタスクのアップロード ID を取得します。
$uploadId = $result->uploadId;
// UploadPartRequest オブジェクトを作成して、オブジェクトをアップロードします。
$request = new Oss\Models\UploadPartRequest(bucket: $bucket, key: $key);
// ローカルファイルのパスとパートのサイズを指定します。
$bigFileName = "/Users/localpath/yourfilename"; // ローカルファイルのパスを指定します。
$partSize = 1 * 1024 * 1024; // パートのサイズを指定します。単位:バイト。この例では、このパラメータは 1 MB に設定されています。
// ローカルファイルを開き、マルチパートアップロードタスクの準備をします。
$file = fopen($bigFileName, 'r');
$parts = []; // 各パートに関する情報を格納します。
if ($file) {
$i = 1; // パート番号を 1 から開始するように指定します。
while (!feof($file)) {
$chunk = fread($file, $partSize); // パートサイズをポーリングします。
// マルチパートアップロード操作を実行します。
$partResult = $client->uploadPart(
new Oss\Models\UploadPartRequest(
bucket: $bucket,
key: $key,
partNumber: $i, // パートの番号を指定します。
uploadId: $uploadId, // マルチパートアップロードタスクのアップロード ID を指定します。
contentLength: null,
contentMd5: null,
trafficLimit: null,
requestPayer: null,
body: Oss\Utils::streamFor(resource: $chunk) // データブロックをストリームに変換します。
)
);
// UploadPart オブジェクトを作成し、パート番号と ETag を記録します。
$part = new Oss\Models\UploadPart(
partNumber: $i,
etag: $partResult->etag,
);
array_push(array: $parts, values: $part); // パート情報を配列に追加します。
$i++; // パート番号を指定します。パート番号は順番に増加します。
}
fclose($file); // ファイルハンドルを閉じます。
}
// マルチパートアップロードタスクを完了します。
$comResult = $client->completeMultipartUpload(
new Oss\Models\CompleteMultipartUploadRequest(
bucket: $bucket,
key: $key,
uploadId: $uploadId, // マルチパートアップロードタスクのアップロード ID。
acl: null,
completeMultipartUpload: new Oss\Models\CompleteMultipartUpload(
parts: $parts // すべてのパートに関する情報。
),
)
);
// マルチパートアップロードタスクの結果を表示します。
printf(
'status code:' . $comResult->statusCode . PHP_EOL . // HTTP ステータスコード。たとえば、HTTP ステータスコード 200 は、リクエストが成功したことを示します。
'request id:' . $comResult->requestId . PHP_EOL . // リクエスト ID。リクエストのデバッグまたはトレースに使用されます。
'complete multipart upload result:' . var_export($comResult, true) // マルチパートアップロードタスクの詳細な結果。
);
追加アップロードを使用してオブジェクトをアップロードするときにタグを設定する
次のサンプルコードは、追加アップロードを使用してオブジェクトをアップロードするときに、オブジェクトのタグを設定する方法の例を示しています。
<?php
// 依存ライブラリを読み込むために、autoload ファイルを導入します。
require_once __DIR__ . '/../../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// コマンドラインパラメータの説明を指定します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (オプション) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
"bucket" => ['help' => 'バケットの名前。', 'required' => True], // (必須) バケットの名前を指定します。
"key" => ['help' => 'オブジェクトの名前。', 'required' => True], // (必須) オブジェクトの名前を指定します。
];
// パラメータの説明を、getopt で必要な長いオプションリストに変換します。
// 各パラメータの末尾にコロン (:) を追加して、値が必要であることを示します。
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// コマンドラインパラメータを解析します。
$options = getopt("", $longopts);
// 必須パラメータが設定されているかどうかを確認します。
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help']; // パラメータに関するヘルプ情報を取得します。
echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
exit(1); // 必須パラメータが設定されていない場合は、プログラムを終了します。
}
}
// 解析されたパラメータから値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
$key = $options["key"]; // オブジェクトの名前。
// 環境変数からアクセス認証情報を取得します。
// EnvironmentVariableCredentialsProvider 環境変数から AccessKey ID と AccessKey シークレットを取得します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証プロバイダーを指定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを指定します。
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // エンドポイントが提供されている場合は、エンドポイントを指定します。
}
// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);
// 追加するコンテンツを指定します。
$data='Hello Append Object'; // サンプルデータを実際のコンテンツに置き換えます。
// AppendObjectRequest オブジェクトを作成して、特定のオブジェクトにデータを追加します。
$request = new Oss\Models\AppendObjectRequest(
bucket: $bucket,
key: $key,
tagging: "key1=value1&key2=value2");
$request-> body=Oss\Utils::streamFor($data); // HTTP リクエストボディのデータがバイナリ ストリームであることを指定します。
$request->position = 0; // 最初の追加操作の開始位置を 0 に設定します。
// 追加アップロード操作を実行します。
$result = $client->appendObject($request);
// 追加アップロード結果を表示します。
// HTTP ステータスコードとリクエスト ID を表示して、リクエストが成功したかどうかを確認します。
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。たとえば、HTTP ステータスコード 200 は、リクエストが成功したことを示します。
'request id:' . $result->requestId . PHP_EOL . // リクエスト ID。リクエストのデバッグまたはトレースに使用されます。
'next append position:' . $result-> nextPosition. PHP_EOL // 次の追加操作の開始位置を指定します。
);
オブジェクトのコピー時にタグを設定する
次のサンプルコードは、オブジェクトをコピーするときに、オブジェクトのタグを設定する方法の例を示しています。
<?php
// 依存ライブラリを読み込むために、autoload ファイルを導入します。
require_once __DIR__ . '/../../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// コマンドラインパラメータの説明を指定します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (オプション) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
"bucket" => ['help' => 'バケットの名前。', 'required' => True], // (必須) コピー先バケットの名前を指定します。
"key" => ['help' => 'オブジェクトの名前。', 'required' => True], // (必須) コピー先オブジェクトの名前を指定します。
"src-bucket" => ['help' => 'コピー元バケットの名前。', 'required' => False], // (オプション) コピー元バケットの名前を指定します。
"key" => ['help' => 'オブジェクトの名前。', 'required' => True], // (必須) コピー元オブジェクトの名前を指定します。
];
// パラメータの説明を、getopt で必要な長いオプションリストに変換します。
// 各パラメータの末尾にコロン (:) を追加して、値が必要であることを示します。
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// コマンドラインパラメータを解析します。
$options = getopt("", $longopts);
// 必須パラメータが設定されているかどうかを確認します。
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help']; // パラメータに関するヘルプ情報を取得します。
echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
exit(1); // 必須パラメータが設定されていない場合は、プログラムを終了します。
}
}
// 解析されたパラメータから値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // コピー先バケットの名前。
$key = $options["key"]; // コピー先オブジェクトの名前。
$srcKey = $options["src-key"]; // コピー元オブジェクトの名前。
// 環境変数からアクセス認証情報を取得します。
// EnvironmentVariableCredentialsProvider 環境変数から AccessKey ID と AccessKey シークレットを取得します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証プロバイダーを指定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを指定します。
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // エンドポイントが提供されている場合は、エンドポイントを指定します。
}
// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);
// CopyObjectRequest オブジェクトを作成して、コピー元オブジェクトをコピーします。
$request = new Oss\Models\CopyObjectRequest(
bucket: $bucket,
key: $key,
sourceKey: $srcKey,
sourceBucket: $sourceBucket,
taggingDirective: "Replace", // コピー元オブジェクトをコピーするときに、コピー元オブジェクトのタグを置き換えます。
tagging:"key1=value1&key2=value2"); // タグ情報を指定します。
if (!empty($options["src-bucket"])) {
$request->sourceBucket = $options["src-bucket"]; // コピー元バケット名が指定されている場合は、sourceBucket パラメータを指定します。
}
$request->sourceKey = $srcKey; // コピー元オブジェクトの名前を指定します。
// オブジェクトコピー操作を実行します。
$result = $client->copyObject($request);
// オブジェクトコピー結果を表示します。
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。たとえば、HTTP ステータスコード 200 は、リクエストが成功したことを示します。
'request id:' . $result-> requestId. PHP_EOL // リクエスト ID。リクエストのデバッグまたはトレースに使用されます。
);
既存のオブジェクトにタグを追加または変更する
既存のオブジェクトにタグを追加または変更する
既存のオブジェクトにタグがない場合、またはオブジェクトのタグが要件を満たしていない場合は、オブジェクトにタグを追加したり、オブジェクトのタグを変更したりできます。
次のサンプルコードは、既存のオブジェクトにタグを追加または変更する方法の例を示しています。
<?php
// 依存ライブラリを読み込むために、autoload ファイルを導入します。
require_once __DIR__ . '/../../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// コマンドラインパラメータの説明を指定します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (オプション) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
"bucket" => ['help' => 'バケットの名前。', 'required' => True], // (必須) バケットの名前を指定します。
"key" => ['help' => 'オブジェクトの名前。', 'required' => True], // (必須) オブジェクトの名前を指定します。
];
// パラメータの説明を、getopt で必要な長いオプションリストに変換します。
// 各パラメータの末尾にコロン (:) を追加して、値が必要であることを示します。
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// コマンドラインパラメータを解析します。
$options = getopt("", $longopts);
// 必須パラメータが設定されているかどうかを確認します。
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help']; // パラメータに関するヘルプ情報を取得します。
echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
exit(1); // 必須パラメータが設定されていない場合は、プログラムを終了します。
}
}
// 解析されたパラメータから値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
$key = $options["key"]; // オブジェクトの名前。
// 環境変数からアクセス認証情報を取得します。
// EnvironmentVariableCredentialsProvider 環境変数から AccessKey ID と AccessKey シークレットを取得します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証プロバイダーを指定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを指定します。
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // エンドポイントが提供されている場合は、エンドポイントを指定します。
}
// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);
// PutObjectTaggingRequest オブジェクトを作成して、オブジェクトのタグを設定します。
$request = new Oss\Models\PutObjectTaggingRequest(
bucket: $bucket,
key: $key,
tagging: new Oss\Models\Tagging(
tagSet: new Oss\Models\TagSet(
tags: [
new Oss\Models\Tag('k1', 'v1'), // タグキーと値を指定します。例:k1=v1。
new Oss\Models\Tag('k2', 'v2') // タグキーと値を指定します。例:k2=v2。
]
)
)
);
// オブジェクトのタグを設定します。
$result = $client->putObjectTagging($request);
// リクエストの結果を表示します。
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。たとえば、HTTP ステータスコード 200 は、リクエストが成功したことを示します。
'request id:' . $result-> requestId. PHP_EOL // リクエスト ID。リクエストのデバッグまたはトレースに使用されます。
);