Rails API ActiveStorage: получить общедоступный URL-адрес для отображения изображения из AWS S3 Bucket?

У меня настроен Rails 5.2 API, и я следил за документацией о том, как прикреплять изображения к объекту модели - все работает нормально. Проблема, с которой я столкнулся, заключается в том, что я хочу вернуть в объекте JSON общедоступный URL-адрес вложения, чтобы я мог использовать этот URL-адрес в качестве источника в <img src... в моем интерфейсе React. Есть ли способ вернуть фактический URL-адрес из корзины AWS S3, где изображение будет отображаться при нажатии?

Прямо сейчас я пробовал rails_blob_path, service_url, и я получаю взамен URL-адреса, но ни один из них не отображает изображение так, как я бы надеялся. Какие-нибудь обходные пути к этому?

Опять же, просто нужен фактический общедоступный URL-адрес вложения из s3, чтобы я мог подключить его к атрибуту src внутри <img> и отобразить его. Спасибо.

Мой файл development.rb настраивает config.active_stoarge.service = :amazon.

В моем файле storage.yml amazon настроена так: amazon: service: S3 access_key_id: <%= Rails.application.secrets.amazon[:access_key] %> secret_access_key: <%= Rails.application.secrets.amazon[:secret_key] %> region: us-east-2 bucket: my_bucket_name_here

ActiveStorage 5.2.2

Рельсы 5.2.2


person tman091    schedule 12.12.2018    source источник
comment
что service_url возвращается?   -  person Lenin Raj Rajasekaran    schedule 13.12.2018
comment
Можете ли вы опубликовать файл конфигурации для активного хранилища и отметить, в какой среде вы наблюдаете это поведение? Кроме того, какую именно версию activestorage и рельсов вы используете (из Gemfile.lock) rails_blob_path и rails_blob_url работают должным образом в последних стабильных рельсах.   -  person Jay Dorsey    schedule 19.12.2018
comment
Хорошо, я только что получил прямую ссылку на изображение на s3 с service_url. Правильно ли я предполагаю, что ссылка никогда не изменится и всегда будет указывать на изображение на s3, пока оно существует? @LeninRajRajasekaran @ Джей Дорси   -  person tman091    schedule 20.12.2018
comment
Я нашел еще одно возможное решение для этого. Попробуйте url_for помощник: Rails.application.routes.url_helpers.url_for(object.attachment)   -  person Jay Dorsey    schedule 07.11.2019


Ответы (1)


Вы должны иметь возможность использовать rails_blob_url или rails_blob_path для создания ссылки на фактический файл.

https://edgeguides.rubyonrails.org/active_storage_overview.html#linking-to-files

person Jay Dorsey    schedule 13.12.2018
comment
Каждый из них возвращает относительный путь к изображению в моем приложении, а не внешнюю ссылку на изображение на S3. Я хотел бы найти способ вместо этого увидеть прямой URL-адрес изображения из S3. Я ценю вашу помощь! - person tman091; 19.12.2018
comment
@ tman091 это в локальной среде разработки? Или в развернутом приложении? Если вы следовали онлайн-руководству, возможно, вы настроили его для использования service: Disk для локальной разработки, при которой изображения будут храниться локально, а не на S3. Вы можете поменять местами его, чтобы использовать ту же производственную конфигурацию (и добавить свои env-переменные локально), чтобы заставить его продвигаться на S3. Если это производственная среда, убедитесь, что ваша конфигурация установлена ​​для вашей среды на service: s3 - person Jay Dorsey; 19.12.2018
comment
Это хорошие моменты, Джей. Он находится в локальной среде разработки, но я настроил свой storage.yml так, чтобы он указывал на службу s3 вместо disk, как вы упомянули. Я могу подтвердить, что все без проблем переходит на s3, поэтому я знаю, что все настроено правильно. - person tman091; 20.12.2018