如何使用 PHP 为谷歌云存储对象生成签名 URL

pir*_*win 3 php google-app-engine google-cloud-storage

我尝试使用的方法是使用 openssl

$fp = fopen($key, 'r');  //open the PEM file
$priv_key = fread($fp,8192);
fclose($fp);
$pkeyid = openssl_get_privatekey($priv_key,"password");

openssl_sign($response["data_to_sign"], $signature, $pkeyid,'sha256');

$sign = base64_encode($signature)
Run Code Online (Sandbox Code Playgroud)

这是在 google 中为签名的 url 生成签名的正确方法吗?

Mou*_*iao 10

你可以试试 Google Cloud Storage PHP SDK,它是保持代码干净的好选择。

云存储 PHP SDK

按照Packagist 上的此页面将包安装到您的项目 ,然后

function getSignedGcsUrl($objPath/* which is your target object path */, $duration = 50) 
{
    $storageClient = new StorageClient([
        'projectId' => /* your gcp projectId here */,
        'keyFilePath' => /* your gcp keyFilePath here */,
    ]);
    $bucket = $storageClient->bucket($objPath);
    $object = $bucket->object();
    $url = $object->signedUrl(new \DateTime('+ ' . $duration . ' seconds'));
    return $url;
}
Run Code Online (Sandbox Code Playgroud)

laravel-google-cloud-storage(用于 Laravel)

按照以下页面安装和配置 superbalist/laravel-google-cloud-storage: 在 Github 上,然后

public static function getSignedGcsUrl($objPath, $duration = 50)
{
    return Storage::disk('gcs'/* following your filesystem configuration */)
        ->getAdapter()
        ->getBucket()
        ->object($objPath)
        ->signedUrl(new \DateTime('+ ' . $duration . ' seconds'));
}
Run Code Online (Sandbox Code Playgroud)

  • 2019年最准确的答案 (2认同)