Help us understand the problem. What is going on with this article?

Active Storage利用時にPublic URLな画像を利用する方法

More than 1 year has passed since last update.

Active Storageでs3などにファイルをアップロードする場合、基本的にprivateでアップロードされ、画像表示時には一時URLを参照することになります。

ただ、ogpに使う画像などpublicで恒久的なURLが欲しい場合があると思います。

そんなときの対処方法を調べてみたので共有します。

結論

rails_representation_url を使うのが良さそう感

class Member < ApplicationRecord
  has_one_attached :avatar
end

みたいなモデルの場合

rails_representation_url(@member.avatar.variant(resize: "512x512!", strip: true).processed, disposition: :inline)

のように取得できます

作業ログ

Active StorageはまだPublic URL(ファイル)に対応していない

まじかよ

Rails の ActiveStorage を S3 で使ったらPublicなURLが取れなかった

アップロード時に権限を変更する方法(アップロード後にLambdaでやっても良さそう)があるのか。
でもなんかもっといいやり方ないんだろうか

Rails ActiveStorage で PUBLIC な URL を表示する

このやり方良さそう。
でもbucketポリシーで指定してるけど、Active Storage側はprivate前提なので、後で見たときわからなくなりそうだったり、Active Storage側のレールに乗ってない感で、ちょっと不安あるなあと思ったので、他の選択肢ってないかな

images_controllerみたいなのを自前で作って、signed_urlにリダイレクトすることで、そのURLが公開URLになるのでは?

そういうのがActive Storage公式にあった

https://github.com/rails/rails/blob/v5.2.3/activestorage/app/controllers/active_storage/representations_controller.rb

Take a signed permanent reference for a blob representation and turn it into an expiring service URL for download.
Note: These URLs are publicly accessible. If you need to enforce access protection beyond the
security-through-obscurity factor of the signed blob and variation reference, you'll need to implement your own
authenticated redirection controller.

↓ グーグル翻訳

BLOB表現の署名付き永久参照を取得し、ダウンロード用に有効期限が切れたサービスURLに変換します。
注:これらのURLは一般にアクセス可能です。 アクセス保護を超えてアクセス保護を強化する必要がある場合
署名されたBLOBとバリエーション参照のセキュリティを通じた曖昧さ要因、あなた自身で実装する必要があるでしょう
認証済みリダイレクトコントローラ。

なんか求めてるもののような違うような...英語力が貧弱なので不安

処理を見てみると 単純に service_url へリダイレクトをしているので求めているものっぽい感じ
expireしても再取得できそう

Rails Guideに載ってないのでちょっと不安だが、これを使うことにしました。

shwld
主に開発で得られた知見を記録していきます。 記載された内容は、所属する企業や団体の公式見解ではありません。
https://shwld.net
mof-mof
「つくって人をしあわせにする」をビジョンにAIチャットボットや開発チームレンタル等のサービスを提供している渋谷のIT企業です
https://www.mof-mof.co.jp/about
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした