Постоянный URL-адрес объектов Active Storage в S3 - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть модель под названием кампания, и у каждой кампании есть одно вложение.

Я использую S3 для службы ActiveStorage и мне нужен постоянный URL-адрес для изображений моей кампании.

Я вызываю изображение

campaign.image.service_url

Но срок действия этой ссылки истекает через 5 минут. Мне нужны не истекшие ссылки. (Настройки конфигурации позволяют мне получать URL, срок действия которого истекает через 1 неделю, и это не решает мою проблему снова)

Как я могу получить URL моих изображений?

EDIT

Решение:

Я использую CloudFront для кеша. Это решение, которое мне нравится:

https://domainName+ / campaign.image.key

, которое дает ссылку на файл изображения, срок действия которого не истекает.

Ответы [ 2 ]

0 голосов
/ 19 апреля 2020

Проверьте документы https://api.rubyonrails.org/classes/ActiveStorage/Variant.html#method -i-service_url

Вы не должны предоставлять service_url напрямую:

Возвращает URL-адрес вариант на сервисе. Этот URL предназначен для кратковременного использования в целях безопасности и не используется напрямую пользователями. Вместо этого service_url должен быть доступен только как перенаправление со стабильного, возможно, аутентифицированного URL. Скрытие service_url за перенаправлением также дает вам возможность менять службы без обновления всех URL-адресов. И это позволяет постоянным URL-адресам, перенаправляющим на service_url, кэшироваться в представлении.

Используйте url_for (вариант) (или подразумеваемую форму, такую ​​как + link_to вариант + или + redirect_to вариант +), чтобы получить стабильный URL-адрес для вариант, который указывает на ActiveStorage :: PresentationsController, который, в свою очередь, будет использовать этот метод service_call для своего перенаправления.

Поэтому вместо него используйте url_for(campaign.image) (или url_for(campaign.image.some_variant)).

0 голосов
/ 18 апреля 2020

URL-адрес, срок действия которого не истек, прост и без каких-либо параметров:

http[s]://[bucket-name.s3].amazonaws.com/pathtofile/file.extention

Этот URL-адрес можно получить из AWS SDK с помощью метода S3 :: Objects :public_url

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...