PHP生成腾讯云COS接口需要的请求签名并上传图片

PHP生成腾讯云COS接口需要的请求签名并上传图片

      最近在弄腾讯云COS图片存储的时候,由于不想使用官方提供的SDK,打算通过http方式调取接口而不走官方SDK,博主也通过看官方文档以及自己研究,把自己最终对实现代码分享给大家。

      主要难点是如何生成请求签名,以下是生成签名部分:

/**
 * 请求获取签名
 * @param $method
 * @param $path
 * @param $bucketURL
 * @param $secretKey
 * @param $secretId
 * @return string
 */
static function RequestSign($method, $path, $bucketURL, $secretKey, $secretId)
{
    $signTime = (string)(time() - 60) . ';' . (string)(time() + 1200);
    $host = parse_url($bucketURL);
    $httpString = sprintf("%s\n%s\n\nhost=%s\n", strtolower($method), $path, $host['host']);
    $stringToSign = sprintf("sha1\n%s\n%s\n", $signTime, sha1($httpString));
    $signKey = hash_hmac('sha1', $signTime, $secretKey);
    $signature = hash_hmac('sha1', $stringToSign, $signKey);
    return sprintf('q-sign-algorithm=sha1&q-ak=%s&q-sign-time=%s&q-key-time=%s&q-header-list=host&q-url-param-list=&q-signature=%s', $secretId, $signTime, $signTime, $signature);
}

      以下是上传图片至腾讯云COS指定位置代码

/**
 * 上传图片至腾讯云COS
 * @param $srcPath
 * @param $key
 */
static function uploadImageToCos($srcPath, $key)
{
    #获取基本配置
    $secretId = SecretId;                     //"云 API 密钥 SecretId";
    $secretKey =SecretKey;                    //"云 API 密钥 SecretKey";
    $host =<BucketName-APPID>.cos.<Region>.myqcloud.com;  //请求地址
    #组合请求路由
    $path = "/" . $key;
    #获取签名
    $authorization = RequestSign('put', $path, $host, $secretKey, $secretId);
    #组合请求数据
    $url = $host . $path;
    $data = file_get_contents($srcPath);
    $header = array(
        'Authorization: ' . $authorization,
        'Date: ' . gmdate('D, d M Y H:i:s T')
    );
    #请求
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    $data = curl_exec($curl);
    $error = curl_error($curl);
    curl_close($curl);
}

      以下是删除腾讯云COS上指定图片代码

/**
 * 删除图片
 * @param $key
 */
static function deleteImageToCos($key)
{
    #获取基本配置
    $secretId = SecretId;                     //"云 API 密钥 SecretId";
    $secretKey =SecretKey;                    //"云 API 密钥 SecretKey";
    $host =<BucketName-APPID>.cos.<Region>.myqcloud.com;  //请求地址
    #组合请求路由
    $path = "/" . $key;
    #组合请求连接
    $url = $host . $path;
    #获取签名
    $authorization = RequestSign("delete", $path, $host, $secretKey, $secretId);
    #组合头部
    $header = array(
        'Authorization: ' . $authorization,
        'Date: ' . gmdate('D, d M Y H:i:s T')
    );
    #请求
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
    $data = curl_exec($curl);
    $error = curl_error($curl);
    curl_close($curl);
}

      调用方法代码

$srcPath = ‘www/wwwroot/test.jpg’;    //本地图片目录
$key = "test/test.jpg";               //上传指定地址【test文件夹下命名为test.jpg】
uploadImageToCos($srcPath, $key);     //上传图片
deleteImageToCos($key);               //删除图片

      这样我们便成功上传图片至腾讯云COS指定位置,成功删除腾讯云COS指定图片。

1条评论

  • 香香球球 2020-04-04 21:32:24

    不错不错,刚好用上

    回复

发表评论