开发者社区 问答 正文

oss 读写权限为公共读,开启原图保护,如何获取原图永久url

oss 读写权限为公共读,并开启原图保护。
现在通过签名的方式可以获得原图的url,但必须设置过期时间。
我现在想获取原图的永久url,而不是临时url,是否可以。
如果可以,可否提供php相关代码

展开
收起
1110830082017203 2018-08-29 13:28:11 1603 分享 版权
阿里云 AI 助理回答

在阿里云OSS(Object Storage Service)中,如果一个Bucket设置为公共读权限,并且启用了原图保护功能,意味着直接通过Bucket的URL可以访问到允许公开的文件,但是原图保护会阻止直接通过URL访问原始图片,要求必须通过处理参数(如样式参数)来访问。因此,即使Bucket是公共读,也无法直接生成一个永久有效的、不带过期时间的URL来访问受原图保护的资源。

不过,如果你的需求是让用户能够长期稳定地访问这些资源,而不是绝对意义上的“永久”(因为任何网络资源的访问链接都可能因各种原因失效),可以通过以下变通方式实现:

  1. 定期刷新签名URL:虽然不能生成永久URL,但你可以设置一个较长的有效期,比如一年或几年,然后在URL即将过期时,通过程序自动刷新签名并更新存储的URL。这样对于用户来说,体验上接近于“永久”。

  2. 使用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,尽管它不是永久的,但可以根据需求调整有效期以达到接近“永久”的效果。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答