kennethormandy/craft-s3securedownloads

返回 AWS 签名 URL 并代理下载请求。

5.0.0 2024-06-20 20:52 UTC

This package is auto-updated.

Last update: 2024-09-16 22:43:28 UTC


README

此插件将返回一个用于允许临时访问私有对象的预签名 URL。您可以选择仅允许登录用户下载文件,并强制下载文件(适用于 PDF 文件)。

来自原始开发者,Jonathan Melville

此插件最初是为金融服务行业的客户开发的,该客户希望确保只有登录用户才能访问财务报告的下载,并且下载链接不能被分享。现在您可以将您的 S3 对象保持私有,但通过一个过期的链接临时授予访问权限。

Screenshot of the plugin settings.

安装

# Require the plugin with composer
composer require kennethormandy/craft-s3securedownloads

然后,安装插件

# Install the plugin via the Control Panel, or by running:
./craft plugin/install s3securedownloads

使用

传入一个资源的条目 ID,它将为该资源返回一个预签名 URL

{% set asset = entry.myAssetField.one() %}
<a href="{{ getSignedUrl(asset.id) }}">{{ asset }}</a>

默认情况下,只有登录用户才能生成预签名 URL。这可以在插件设置中更改。

生成的预签名 AWS S3 URL 将在 24 小时后过期,或者根据您在插件设置中配置的时间长度。

选项

文件名

默认情况下,下载将使用与 Craft CMS 资源相同的文件名。或者,可以将自定义文件名传递给 AWS。例如

{% set asset = entry.myAssetField.one() %}
<a href="{{ getSignedUrl(asset.id, { filename: 'my-new-filename.png' }) }}">{{ asset }}</a>

事件

  • kennethormandy\s3securedownloads\services\SignUrl
    • SignUrl::EVENT_BEFORE_SIGN_URL
    • SignUrl::EVENT_AFTER_SIGN_URL
use Craft;
use yii\base\Event;
use kennethormandy\s3securedownloads\events\SignUrlEvent;
use kennethormandy\s3securedownloads\services\SignUrl;

// …

Event::on(
    SignUrl::class,
    SignUrl::EVENT_BEFORE_SIGN_URL,
    function (SignUrlEvent $event) {
        $asset = $event->asset;
        Craft::info("Handle EVENT_BEFORE_SIGN_URL event here", __METHOD__);
    }
);

Event::on(
    SignUrl::class,
    SignUrl::EVENT_AFTER_SIGN_URL,
    function (SignUrlEvent $event) {
        $asset = $event->asset;
        Craft::info("Handle EVENT_AFTER_SIGN_URL event here", __METHOD__);
    }
);

早期版本

S3 Secure Downloads 可用于 Craft 3、4 和 5。对于在 Craft v2.5.x 上运行的版本,请参阅原始插件。请注意,截至 2020 年 6 月 24 日,所有新的 AWS S3 存储桶都要求使用 Signature Version 4 签名 URL,而原始插件(可以理解)仅使用 Signature Version 2 签名 URL。

许可证

MIT 许可证 (MIT)

版权所有 © 2016–2019 Jonathan Melville
版权所有 © 2019–2024 Kenneth Ormandy Inc.