虽然阿里云OSS有专用的PHP SDK(composer require aliyuncs/oss-sdk-php)但有时候项目太多类引入太混乱了,其实使用本地签名即可拿到临时下载链接,仅限Bucket权限为私有的空间使用。
/**
* 生成预签名URL,用于阿里云OSS私有存储请求临时下载URL
* @param {string} $accessKeyId RAM子账号AccessKeyId
* @param {string} $accessKeySecret RAM子账号AccessKeySecret
* @param {string} $endpoint OSS默认域名或自定义域名,需以"http://"或"https://"开头,默认域名例如:https://oss-xulgr.oss-cn-shenzhen.aliyuncs.com,自定义域名例如:https://oss.xulgr.com
* @param {string} $bucket Bucket名称
* @param {string} $filePath 要下载的文件路径,不以"/"开头,需包含文件名和扩展名,例如:xulgr/abc/xxxx.exe
* @param {number} $timeout 过期时间,单位秒(3600=1小时)
* @returns {string} 返回OSS临时下载URL
*/
function generatePresignedUrl($accessKeyId, $accessKeySecret, $endpoint, $bucket, $filePath, $timeout = 3600) {
$expires = time() + $timeout;
$stringToSign = "GET\n\n\n{$expires}\n/{$bucket}/{$filePath}"; //签名字符串
$signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret, true)); //HMAC-SHA1签名
$url = sprintf(
'%s/%s?Expires=%d&OSSAccessKeyId=%s&Signature=%s',
$endpoint,
$filePath,
$expires,
urlencode($accessKeyId),
urlencode($signature)
);
return $url;
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
