华为云对象存储 obs 基于表单上传生成签名代码:
/**
* 文件上传 OBS 策略
* @param $dir 需要上传到华为云的文件夹名称
* @param $params $params['content-type']上传文件类型,必传;否则上传文件,在浏览器打开是下载
*/
static function fileUploadPolicyObs( $dir = 'steam-box/', $params=[] )
{
$accessKeyId = '111111';
$accessKeySecret = '123456';
$host = 'https://static-img.hotjh.com';//前端上传文件要调的域名。可以是华为的域名,也可以是自己绑定桶域名
$bucket = 'ftfoolish';//桶名称
$now = time();
$expire = 30;//过期时间
$end = $now + $expire;
$expiration = self::getiso8601($end);//获取指定格式时间,2019-12-20T16:38:59Z
$conditions = [
['bucket'=>$bucket],//指定桶
['content-length-range', 0, 1048576000],//上传文件大小
['starts-with', '$key', $dir],//路径
['starts-with', '$content-type', $params['content-type']],//指定上传文件类型,如:image/png
//['starts-with', '$success_action_status', '200'],//返回状态码
];
$arr = array('expiration' => $expiration, 'conditions' => $conditions);
$policy = json_encode($arr);
$base64_policy = base64_encode($policy);//生成 policy
$string_to_sign = $base64_policy;
$signature = base64_encode(hash_hmac('sha1', $string_to_sign, $accessKeySecret, true));//生成签名
$response = array();
$response['AccessKeyId'] = $accessKeyId;
$response['host'] = $host;
$response['policy'] = $base64_policy;
$response['signature'] = $signature;
$response['expire'] = $end;
$response['dir'] = $dir.date('Ymd').'/';
return $response;
}
static function getiso8601($time) {
$dtStr = date("c", $time);
$my_date_time = new \DateTime($dtStr);
$expiration = $my_date_time->format(\DateTime::ISO8601);
$pos = strpos($expiration, '+');
$expiration = substr($expiration, 0, $pos);
return $expiration."Z";
}
得到相关信息之后,可用 postman 测试,测试结果如下图:
如有侵权请邮件通知