<?php
|
|
namespace addons\hwobs\library;
|
|
use Obs\Internal\Common\Model;
|
use Obs\Internal\Signature\DefaultSignature;
|
|
class Signer
|
{
|
|
public function __construct()
|
{
|
}
|
|
/**
|
* 获取分片文件的签名
|
* @param string $url
|
* @param string $uploadId
|
* @param int $fileSize
|
* @param int $partSize
|
* @param string $date
|
* @return array
|
*/
|
public static function getPartsAuthorization($url, $uploadId, $fileSize, $partSize, $date)
|
{
|
$config = get_addon_config('hwobs');
|
$i = 0;
|
$size_count = $fileSize;
|
$values = array();
|
while ($size_count > 0) {
|
$size_count -= $partSize;
|
$values[] = array(
|
$partSize * $i,
|
($size_count > 0) ? $partSize : ($size_count + $partSize),
|
);
|
$i++;
|
}
|
|
$httpMethod = "PUT";
|
$headers = [
|
"Host" => str_replace(['http://', 'https://'], '', $config['uploadurl']),
|
"Content-Length" => 0,
|
"x-amz-date" => $date,
|
];
|
|
$result = [];
|
foreach ($values as $index => $value) {
|
$headers['Content-Length'] = $value[1];
|
$params = ['partNumber' => $index + 1, 'uploadId' => $uploadId, 'uriParam' => $url, 'dnsParam' => $config['bucket'], 'x-amz-date' => $date];
|
$model = new Model($params);
|
$sign = new DefaultSignature($config['accessKey'], $config['secretKey'], false, $config['uploadurl'], $httpMethod, 'v2', false, false);
|
$requestConfig = [
|
'httpMethod' => $httpMethod,
|
'requestParameters' => [
|
'x-amz-date' => ['location' => 'header'],
|
'partNumber' => ['location' => 'query'],
|
'uploadId' => ['location' => 'query'],
|
'uriParam' => ['location' => 'uri'],
|
'dnsParam' => ['location' => 'dns'],
|
]
|
];
|
$sig = $sign->doAuth($requestConfig, $params, $model);
|
$result[] = $sig['headers']['Authorization'];
|
}
|
|
return $result;
|
}
|
}
|