分塊上傳預簽名Demo
- 以下是分塊上傳的兩個步驟
- 初始化分片上傳
- 獲取上傳分片的預簽名URL
- 使用該URL可以不帶簽名直接上傳
<?php
require(__DIR__ . DIRECTORY_SEPARATOR . 'cos-autoloader.php');
$cosClient = new Qcloud\Cos\Client(array('region' => getenv('COS_REGION'),
'credentials'=> array(
'secretId' => '',
'secretKey' => '')));
//bucket的命名規(guī)則為{name}-{appid} ,此處填寫的存儲桶名稱必須為此格式
$bucket = 'lewzylu02-1252448703';
$key = 'a.txt';
$local_path = "E:/a.txt";
$uploadId = "111";
//初始化分塊上傳獲取uploadId
try {
$result = $cosClient->createMultipartUpload(array(
'Bucket' => $bucket,
'Key' => $key,
));
print_r($result);
$uploadId = $result['UploadId'];
} catch (\Exception $e) {
echo "$e\n";
}
// 獲取分塊上傳預簽名
try {
#此處可以替換為其他上傳接口
$command = $cosClient->getCommand('uploadPart', array(
'Bucket' => $bucket,
'Key' => $key,
'UploadId' => $uploadId,
'PartNumber' => '1',
'Body' => ''
));
$signedUrl = $command->createPresignedUrl('+10 minutes');
echo ($signedUrl);
} catch (\Exception $e) {
echo "$e\n";
}
- complete操作則需要獲取到每一塊的ETag
- ETag需要從上傳的response中獲取
# completeMultipartUpload接口
$rt = $cosClient->completeMultipartUpload(array(
'Bucket' => $bucket,
'Key' => $key,
'UploadId' => $uploadId,
'Parts' => array(
array(
'ETag' => 'string',
'PartNumber' => integer,
),
// ... repeated
)));
- 若無法從分片的response中獲取ETag,則可以調用ListParts接口,獲取每一個成功上傳的塊的partNumber和Etag。
# ListParts 接口
try {
$result = $cosClient->ListParts(array(
'Bucket' => $bucket,
'Key' => $key,
'UploadId'=> $uploadId
));
print_r($result);
} catch (\Exception $e) {
echo "$e\n";
}