Files
fast/addons/hwobs/library/Signer.php
xiadc 32612f3103 feat(upload): 添加华为 OBS 对象存储支持
- 在 addons.php 中添加了与华为 OBS 相关的钩子
- 新增了对华为 OBS 上传功能的实现,包括分片上传和合并
- 优化了上传参数处理和错误处理
- 支持客户端和服务端两种上传模式
2025-04-26 15:49:23 +08:00

69 lines
2.1 KiB
PHP

<?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;
}
}