版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在阿里云OSS(Object Storage Service)中,如果一个Bucket设置为公共读权限,并且启用了原图保护功能,意味着直接通过Bucket的URL可以访问到允许公开的文件,但是原图保护会阻止直接通过URL访问原始图片,要求必须通过处理参数(如样式参数)来访问。因此,即使Bucket是公共读,也无法直接生成一个永久有效的、不带过期时间的URL来访问受原图保护的资源。
不过,如果你的需求是让用户能够长期稳定地访问这些资源,而不是绝对意义上的“永久”(因为任何网络资源的访问链接都可能因各种原因失效),可以通过以下变通方式实现:
定期刷新签名URL:虽然不能生成永久URL,但你可以设置一个较长的有效期,比如一年或几年,然后在URL即将过期时,通过程序自动刷新签名并更新存储的URL。这样对于用户来说,体验上接近于“永久”。
使用CDN加速并配置缓存策略:将OSS中的对象通过阿里云CDN进行分发。当用户首次请求资源时,CDN节点会从OSS拉取内容并缓存起来,后续相同请求可以直接从CDN节点获取,有效减轻OSS压力的同时,也可以提供相对稳定的访问链接。通过合理的缓存策略设置,可以让资源在CDN上保持较长时间的可用性。
关于PHP代码生成带有过期时间的签名URL,这里是一个示例代码:
require_once 'vendor/autoload.php'; // 确保已经安装了aliyun-oss-sdk-php库
use OSS\OssClient;
use OSS\Core\OssUtil;
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
$accessKeyId = "<yourAccessKeyId>";
$accessKeySecret = "<yourAccessKeySecret>";
$bucket = "<yourBucketName>";
$object = "<yourObjectName>";
// 实例化OSSClient
$ossClient = new OssClient($accessKeyId, $accessKeySecret, '<yourEndpoint>');
// 设置URL过期时间为3600秒(1小时)
$expiration = 3600;
// 生成签名URL
$url = $ossClient->signUrl($bucket, $object, $expiration);
echo "The signed URL is: " . $url;
请根据实际情况替换<yourAccessKeyId>、<yourAccessKeySecret>、<yourBucketName>、<yourObjectName>以及<yourEndpoint>。此代码片段展示了如何生成一个具有指定有效期的URL,尽管它不是永久的,但可以根据需求调整有效期以达到接近“永久”的效果。