分塊上傳預簽名Demo

分塊上傳預簽名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";
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容