条件付きダウンロードでは、Object Storage Service (OSS) オブジェクトをダウンロードする際に 1 つ以上の条件を指定できます。指定した条件が満たされた場合にのみ、オブジェクトはローカルメモリまたはローカルファイルにダウンロードされます。条件が満たされない場合はエラーが返され、ダウンロードは開始されません。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスするには、内部エンドポイントを使用します。サポートされているリージョンとエンドポイントの詳細については、リージョンとエンドポイントをご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名またはセキュリティトークンサービス (STS) を使用して OSSClient インスタンスを作成する場合は、OssClient の作成をご参照ください。
条件付きダウンロードを実行するには、
oss:GetObject権限が必要です。詳細については、RAM ユーザーへのカスタムポリシーのアタッチをご参照ください。
条件
次の表に、OSS がサポートする条件をリストします。`If-Modified-Since` と `If-Unmodified-Since` は同時に使用できます。また、`If-Match` と `If-None-Match` も同時に使用できます。
パラメーター | 説明 | メソッド |
If-Modified-Since | 指定した時刻より後にオブジェクトが変更された場合、オブジェクトはダウンロードされます。それ以外の場合は、`304 Not modified` エラーが返されます。 | OssClient::OSS_IF_MODIFIED_SINCE |
If-Unmodified-Since | 指定した時刻以前にオブジェクトが変更された場合、オブジェクトはダウンロードされます。それ以外の場合は、`412 Precondition failed` エラーが返されます。 | OssClient::OSS_IF_UNMODIFIED_SINCE |
If-Match | OSS オブジェクトの ETag が指定された ETag と一致する場合、オブジェクトはダウンロードされます。それ以外の場合は、`412 Precondition failed` エラーが返されます。 説明 オブジェクトの ETag は `$ossClient->getObjectMeta` メソッドを使用して取得します。 | OssClient::OSS_IF_MATCH |
If-None-Match | OSS オブジェクトの ETag が指定された ETag と一致しない場合、オブジェクトはダウンロードされます。それ以外の場合は、`304 Not modified` エラーが返されます。 | OssClient::OSS_IF_NONE_MATCH |
オブジェクトのローカルメモリへの条件付きダウンロード
次のコードは、条件を指定してオブジェクトをローカルメモリにダウンロードする方法を示しています:
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// 次の例では、中国 (杭州) リージョンのエンドポイントを使用します。実際の値に置き換えてください。
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// バケット名を指定します。
$bucket= "yourBucketName";
// オブジェクト名を指定します。オブジェクト名は、バケット名を含まないオブジェクトの完全なパスです (例: exampledir/exampleobject.txt)。
$object = "yourObjectName";
try{
$options = array(
OssClient::OSS_HEADERS => array(
// オブジェクトが Fri, 9 Apr 2021 14:47:53 GMT より後に変更された場合にダウンロードします。
OssClient::OSS_IF_MODIFIED_SINCE => "Fri, 9 Apr 2021 14:47:53 GMT",
// オブジェクトが Wed, 13 Oct 2021 14:47:53 GMT 以前に変更された場合にダウンロードします。
OssClient::OSS_IF_UNMODIFIED_SINCE => "Fri, 13 Oct 2021 14:47:53 GMT",
// ETag が指定された ETag と一致しない場合にオブジェクトをダウンロードします。
OssClient::OSS_IF_NONE_MATCH => '"5B3C1A2E0563E1B002CC607C****"',
// ETag が指定された ETag と一致する場合にオブジェクトをダウンロードします。
OssClient::OSS_IF_MATCH => '"fba9dede5f27731c9771645a3986****"',
)
);
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
// オブジェクトをローカルメモリにダウンロードします。
$content = $ossClient->getObject($bucket, $object, $options);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print ($content);
print(__FUNCTION__ . ": OK" . "\n");オブジェクトのローカルファイルへの条件付きダウンロード
次のコードは、条件を指定してオブジェクトをローカルファイルにダウンロードする方法を示しています:
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// 次の例では、中国 (杭州) リージョンのエンドポイントを使用します。実際の値に置き換えてください。
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// バケット名を指定します。
$bucket= "yourBucketName";
// オブジェクト名を指定します。オブジェクト名は、バケット名を含まないオブジェクトの完全なパスです (例: exampledir/exampleobject.txt)。
$object = "yourObjectName";
// ローカルファイルの完全なパスを指定します。例: D:\\localpath\\examplefile.txt。
$localfile = "yourLocalFile";
try{
$options = array(
OssClient::OSS_HEADERS => array(
// オブジェクトが Fri, 9 Apr 2021 14:47:53 GMT より後に変更された場合にダウンロードします。
OssClient::OSS_IF_MODIFIED_SINCE => "Fri, 9 Apr 2021 14:47:53 GMT",
// オブジェクトが Wed, 13 Oct 2021 14:47:53 GMT 以前に変更された場合にダウンロードします。
OssClient::OSS_IF_UNMODIFIED_SINCE => "Fri, 13 Oct 2021 14:47:53 GMT",
// ETag が指定された ETag と一致しない場合にオブジェクトをダウンロードします。
OssClient::OSS_IF_NONE_MATCH => '"5B3C1A2E0563E1B002CC607C****"',
// ETag が指定された ETag と一致する場合にオブジェクトをダウンロードします。
OssClient::OSS_IF_MATCH => '"fba9dede5f27731c9771645a3986****"',
OssClient::OSS_FILE_DOWNLOAD => $localfile
)
);
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
$ossClient->getObject($bucket, $object, $options);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}