require_once __DIR__ . '/vendor/autoload.php';
use Tos\Exception\TosClientException;
use Tos\Exception\TosServerException;
use Tos\Model\CompleteMultipartUploadInput;
use Tos\Model\CreateMultipartUploadInput;
use Tos\Model\UploadedPart;
use Tos\Model\UploadPartInput;
use GuzzleHttp\Psr7\Utils;
$client = new TosClient([
'region' => 'your region',
'endpoint' => 'your endpoint',
'ak' => getenv('TOS_ACCESS_KEY'),
'sk' => getenv('TOS_SECRET_KEY'),
$bucket = 'bucket-test';
$input = new CreateMultipartUploadInput($bucket, $key);
$input->setACL(Enum::ACLPublicRead);
$input->setStorageClass(Enum::StorageClassStandard);
$input->setMeta(['aaa' => 'bbb', 'Chinese Key' => 'Chinese Value']);
$input->setContentType('text/plain');
$output = $client->createMultipartUpload($input);
echo $output->getRequestId() . PHP_EOL;
echo 'createMultipartUpload succeed' . PHP_EOL;
$uploadId = $output->getUploadID();
$localBigFilePath = 'local_big_file_path';
$partSize = intval(20 * 1024 * 1024);
$fileSize = filesize($localBigFilePath);
$partCount = intval($fileSize / $partSize);
if (($lastPartSize = $fileSize % $partSize) !== 0) {
$lastPartSize = $partSize;
for ($i = 0; $i < $partCount; $i++) {
$file = fopen($localBigFilePath, 'r');
fseek($file, $partSize * $i, 0);
$input = new UploadPartInput($bucket, $key, $uploadId, $partNumber);
if ($i === $partCount - 1) {
$input->setContentLength($lastPartSize);
$input->setContentLength($partSize);
$input->setContent($file);
$output = $client->uploadPart($input);
echo $output->getRequestId() . PHP_EOL;
echo sprintf('upload part %d succeed', $partNumber) . PHP_EOL;
if (is_resource($file)) {
$parts[] = new UploadedPart($partNumber, $output->getETag());
$input = new CompleteMultipartUploadInput($bucket, $key, $uploadId, $parts);
$output = $client->completeMultipartUpload($input);
echo $output->getRequestId() . PHP_EOL;
echo 'completeMultipartUpload succeed' . 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)) {