PHP无需SDK一个函数实现从阿里云OSS私有存储中获取临时下载链接

虽然阿里云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
喜欢就支持一下吧
点赞6 分享