require_once __DIR__ . '/vendor/autoload.php';
use Tos\Exception\TosClientException;
use Tos\Exception\TosServerException;
use Tos\Model\HeadObjectInput;
use Tos\Model\GetObjectInput;
$client = new TosClient([
'region' => 'your region',
'endpoint' => 'your endpoint',
'ak' => getenv('TOS_ACCESS_KEY'),
'sk' => getenv('TOS_SECRET_KEY'),
$headObjectOutput = $client->headObject(new HeadObjectInput('bucket-test', 'key-test'));
echo $headObjectOutput->getRequestId() . PHP_EOL;
$partSize = intval(5 * 1024 * 1024);
$objectSize = $headObjectOutput->getContentLength();
$partCount = intval($objectSize / $partSize);
if ($objectSize % $partSize !== 0) {
$localBigFilePath = 'local_big_file_path';
$file = fopen($localBigFilePath, 'w');
for ($i = 0; $i < $partCount; $i++) {
$input = new GetObjectInput('bucket-test', 'key-test');
$input->setRangeStart($i * $partSize);
if ($i === $partCount - 1) {
$input->setRangeEnd($objectSize - 1);
$input->setRangeEnd(($i + 1) * $partSize - 1);
fseek($file, $partSize * $i, 0);
$output = $client->getObject($input);
echo $headObjectOutput->getRequestId() . PHP_EOL;
while ($buf = $output->getContent()->read(65536)) {
fwrite($file, $buf, strlen($buf));
$output->getContent()->close();
echo sprintf('get object by range %d succeed', $i) . 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;
if (is_resource($file)) {
$output->getContent()->close();