BOS API生成URL函数
小****子 · 小****子 发布于2015-11-30 14:20 浏览:3071 回复:1

用过BOS SDK无论哪个版本的人,都知道SDK中有一个函数叫做generatePresignedUrl。这个函数是用来获取指定object的URL的。 我们用API的,也试图找到这个接口,发现BOS的官方文档并没有提供这个函数的接口,那么这个URL要怎么生成呢?

其实,这个接口和getobject的接口是一样的。直接用那个接口,生成认证字符串,最后在直接拼接URL就可以了。

直接上代码:

<?php

/*
生成UTC时间,默认是当前时间。间的格式是:2015-10-23T08:48:00Z
*/

date_default_timezone_set('UTC');
$timestamp = date("Y-m-d")."T".date("H:i:s")."Z";
print $timestamp."\n";

$AK = "";
$SK = "";

$expirationPeriodInSeconds = "-1";

/*
这里要生成signKey,生成signKey需要是将bce-auth-v1+AK+timestamp+过期时间
拼接起来形成authStringPrefix.
然后用签名中使用的HASH算法(HMAC SHA256)将刚才拼接的authStringPrefix和SK签一遍,
打印出来signKey。
*/
$authStringPrefix = "bce-auth-v1"."/".$AK."/".$timestamp."/".$expirationPeriodInSeconds;
print $authStringPrefix."\n";

$SigningKey=hash_hmac('SHA256',$authStringPrefix,$SK);
print $SigningKey."\n";

$host="host:bj.bcebos.com";
/*
对于GET请求,建议header里只需要加入host;如果要在HTTP浏览器中引用建议只加入host
*/
//可以没有CanoncialString,也就是这一项为空
$CanonicalString = "";

$object = "image.jpg";
//为了将中文名称的object也做urlencode
$object1 = urlencode($object);
$URI = "/v1/bucket名称/image.jgp"; 
$CanonicalURI = "/v1/zxdtestbae/$object1";

/*
CanoncialRequest由请求方法(GET,PUT或者POST), CanoncialURL,CanoncialHeaders组成。
*/

$CanonicalRequest = "GET\n".$CanonicalURI."\n".$CanonicalString."\n".$host;  
print $CanonicalRequest."\n";

/*
使用 HMACSHA256 算法,SignKey,CanonicalRequest 生成最终签名 
*/
$Signature = hash_hmac('SHA256',$CanonicalRequest,$SigningKey);
print $Signature."\n";

/*
生成认证字符串,认证字符串的格式为:
bce-auth-v1/{AK}/{timestamp}/{expirationPeriodInSeconds}/{CanonicalHeaders1}/{signature}
*/
$Authorization = "bce-auth-v1/{$AK}/".$timestamp."/{$expirationPeriodInSeconds}/{$CanonicalHeaders1}/{$Signature}";

print $Authorization."\n";

$authorization = urlencode($Authorization);
/*拼接URL,host+CanoncialURL+规范化之后的认证字符串
*/
$URL = "http://bj.bcebos.com{$CanonicalURI}?authorization={$authorization}";
print $URL."\n";

?>  


点赞  ( 0 )
收藏
评论(1)
共1条回复 最后由高****师回复于2015-12-01 16:45
#2高****师回复于2015-12-01 16:45:36

哎呦,这个好!

0
TOP