最近给客户做了一个针对 OSS 鉴权下载的功能(OSS 下载加密)。就是阿里云 OSS 的 bucket 是私密的,为了防止下载链接被盗用,需要结合 erphpdown 插件做鉴权下载。这样就算别人知道了你文件在 OSS 的下载地址(例如:https://2k2 @ $ + W 1 7 lss.ossk O { { B x &-cn-guangzhou.aliyuncs.com/test/erphpdown.zip)也是无法下载的。
当然,下载地址里还是填 OSS 的下载地: : ` 0 a U址,只是在 erphpdown 跳转处理下载逻辑时会自动做鉴权加上参数(例如:U % 8 E % ! Qhttps://2kss.oss-cn-guangzhou.aliyuncs.com/test/erphpdown.zip?OSSAccessKeyId=xxxxx&Expires=1644376819&Signature=ooooo)。
代码示例如下:
- require ERPHPDOWN_PATH.'/aliyun-oss-php-sdk/auto^ b P 7 J 2 m g 0load.php';
- use OSS\OssClient;
- use Oo 9 ? Q ~ p |SS\Core\OssExcepti% K ] }on;
- $Bucket = "";
- $EndPoint = "oss-cn-guangzhou.aliyuncs.com";
- $keyname = explode('.aliyuncs.com/', $fileZ 6 a |); k );[1];
- $regio2 J | ] p +n = "cn-guangzhp m ! % F {ou";
- $KeyId = "&qc \ I Y P K 9 _ Uuot;;
- $KeySecret = &q+ I {uot;";
- try {
- $ossClieZ y fnt = new OssClient($KeyK ^ q e / 0Id, $KeySecret, $EndPoint);
- $presignedUrl = $ossClient->generatePresignedUrl($Bucket, $kex a K Zyname, strtoB g U ] Wtime("+5 minutes"));
- $presignedUrl = str_replace("http://&g } % 1 bquot;, "https://"D S k z } S f;, $presignedUrl);
- wp_redirect~ ( * Q D j ^ 0 W0;$preK g YsignedUrl);
- exit;
- } catch (OssO ? ! = } e B W qException* ( G O M m t J $e) {
- echo $e->getMessage();
- exiv E s Z H et;
- }