ksyun s3 签名计算 php 代码

来源:互联网 发布:linux下类似fildder 编辑:程序博客网 时间:2024/05/17 02:16
通过这个函数计算出来的url,可以直接下载对应的key,也就是你的文件
<?php   $signableQueryString = array(        'acl', 'delete', 'lifecycle', 'location', 'logging', 'notification',        'partNumber', 'policy', 'requestPayment', 'torrent', 'uploadId',        'uploads', 'versionId', 'versioning', 'versions', 'website',        'response-cache-control', 'response-content-disposition',        'response-content-encoding', 'response-content-language',        'response-content-type', 'response-expires', 'restore', 'tagging', 'cors'    );    function args_deal($request){$query = "?";foreach($request as $k=>$v){$query.=$k;if((strlen($v)!=0 && $v != "") || ($v=='0')){$v = rawurlencode($v);$query.="=".$v.'&';}else{$query.='&';}}return substr($query,0,-1);}       $signableHeaders = array('Content-MD5', 'Content-Type');        function url(array $credentials){    $query = args_deal($credentials["query"]);    $sign = sign_create($credentials);    $object = rawurlencode($credentials['object']);    $url = "http://".$credentials['bucket'].".kss.ksyun.com/".$object.$query.'&Signature='.$sign;    echo $url;        }    function sign_create(array $credentials)    {        $stringToSign = createCanonicalizedString($credentials);        $sign = signString($stringToSign, $credentials["crendit"]["access_key"]);        return $sign;    }    function signString($string, $credentials)    {        return base64_encode(hash_hmac('sha1', $string, $credentials, true));    }    function createCanonicalizedString(array $req, $expires = null)    {    global $signableQueryString;        $buffer = $req['method'] . "\n\n\n";        $bucket = array_key_exists("bucket", $req) ? $req["bucket"]:null;        $buffer .= $bucket ? "/{$bucket}" : '';                $object = array_key_exists("object", $req) ? $req["object"]:null;        if ($object != null){        $object = rawurlencode($object);        }        $buffer .= $object ? "/{$object}" : '';              $query = $req["query"];        $first = true;        foreach ($signableQueryString as $key) {            if ( array_key_exists($key, $query)  ) {            $value = $query[$key];                $buffer .= $first ? '?' : '&';                $first = false;                $buffer .= $key;                if ($value !== "") {                    $buffer .= "={$value}";                }            }        }        return $buffer;        }        $listall = array('crendit' => array('access_id' => "your access id",'access_key' => "your secret key",),'method' => 'GET','bucket' => 'your bucket','object' => 'your file','header' => array(),'query' => array('response-content-disposition' =>'attachment; filename=fname.ext','response-content-type' => 'text/html')           );               echo url($listall);           

原创粉丝点击