下载对象时,可以指定一个或多个限定条件,满足限定条件则下载,不满足条件则抛出异常不会触发下载行为。TOS 服务遵照 HTTP 规范,提供了多种限定条件,包括 If-Match、If-Unmodified-Since 等。
您可以通过 GetObjectInput->setIfMatch 在下载时指定限定条件,示例代码如下:
<?php // 假设使用 composer 安装 require_once __DIR__ . '/vendor/autoload.php'; use Tos\TosClient; use Tos\Exception\TosClientException; use Tos\Exception\TosServerException; use Tos\Model\GetObjectInput; $output = null; try { $client = new TosClient([ 'region' => 'your region', 'endpoint' => 'your endpoint', // 从环境变量中获取访问密钥 'ak' => getenv('TOS_ACCESS_KEY'), 'sk' => getenv('TOS_SECRET_KEY'), ]); $input = new GetObjectInput('bucket-test', 'key-test'); // 指定 If-Match $input->setIfMatch('object etag'); // 指定 If-None-Match // $input->setIfNoneMatch('none object etag'); // 指定 If-Modified-Since,传入秒为单位的时间戳 // $input->setIfModifiedSince(time() - 3600); // 指定 If-Unmodified-Since,传入秒为单位的时间戳 // $input->setIfUnmodifiedSince(time() + 3600); $output = $client->getObject($input); echo $output->getRequestId() . PHP_EOL; // 获取对象长度 echo $output->getContentLength() . PHP_EOL; // 获取对象 Content-Type echo $output->getContentType() . PHP_EOL; // 获取对象 ETag echo $output->getETag() . PHP_EOL; // 获取对象 StorageClass echo $output->getStorageClass() . PHP_EOL; // 获取对象 CRC64 echo $output->getHashCrc64ecma() . PHP_EOL; // 获取对象用户自定义元数据 foreach ($output->getMeta() as $k => $v) { echo $k . '=' . $v . PHP_EOL; } // 直接读取字符串 echo $output->getContent()->getContents() . PHP_EOL; } catch (TosClientException $ex) { echo $ex->getMessage() . PHP_EOL; } catch (TosServerException $ex) { echo $ex->getRequestId() . PHP_EOL; echo $ex->getStatusCode() . PHP_EOL; echo $ex->getErrorCode() . PHP_EOL; } finally { if($output){ $output->getContent()->close(); } }