普通下载同样使用 Psr\Http\Message\StreamInterface 作为对象的数据源,本文介绍普通下载的示例代码。
您可以通过 TosClient->getObject 获取下载对象的数据源,示例代码如下:
<?php // 假设使用 composer 安装 require_once __DIR__ . '/vendor/autoload.php'; use Tos\TosClient; use Tos\Exception\TosClientException; use Tos\Exception\TosServerException; use Tos\Model\GetObjectInput; use GuzzleHttp\Psr7\Utils; $output = null; $file = 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'); $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; $output->getContent()->close(); // 下载到本地文件 $file = fopen('local_file_path', 'w'); $input = new GetObjectInput('bucket-test', 'key-test'); $output = $client->getObject($input); echo $output->getRequestId() . PHP_EOL; // 流式写入到本地文件 Utils::copyToStream(Utils::streamFor($output->getContent()), Utils::streamFor($file)); } 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(); } if (is_resource($file)) { fclose($file); } }