是否可以使用 URL 在另一个应用程序中显示来自 rails 活动存储的图像?

Is it possible to display images from rails active storage inside another application using a URL?

我正在尝试使用活动存储从 rails API/backend 访问用户头像对象,并使用 <img> 标签将其显示在电子桌面应用程序中。我一直在图像标签的 src 属性中尝试 URL 格式的各种组合,但总是 运行 进入 rails 路由错误。

我试过使用 key 和 rails 中的 attached_sgid 字段以及下面的 URL 格式,但两种方法都不起作用。

http://localhost:3000/rails/active_storage/blobs/--active_storage_blobs.key--
http://localhost:3000/rails/active_storage/blobs/--attached_sgid--


Gives this error:

No route matches [GET] "/rails/active_storage/blobs/BAh7CEkiCGdpZAY6BkVUSSIqZ2lkOi8vanVtcHN0YXJ0LWFwcC9Vc2VyLzE_ZXhwaXJlc19pbgY7AFRJIgxwdXJwb3NlBjsAVEkiD2F0dGFjaGFibGUGOwBUSSIPZXhwaXJlc19hdAY7AFQw--2465471c08be19196738d37c7f02be10c4a88bba"

甚至可以用这种方式显示活动存储中的图像吗?

我相信你应该 return url 准备好从你的后端使用 API 而不是在你的电子应用程序上构建 URL。

您可以使用以下方法从您的模型中找到正确的 url:

url_for(user.avatar)

有一些选项可以 return 它。如果你不介意让你的模型有点脏,你可以创建一个名为 avatar_url 的方法,然后 return 这个值与你的 json.

# new method on model
def avatar_url
  Rails.application.routes.url_helpers.url_for(avatar)
end

# on controller controller
def show
  user = User.find(params[:id])
  render json: user, methods: [:avatar_url]
end

更简洁的选择是创建一个 jbuilder 来为您构建 json,然后在其中添加 url:

# create new jbuilder file app/view/users/show.json.jbuilder
json.id @user.id
json.avatar_url url_for(@user.avatar) if post.avatar.attached?

# on controller controller
def show
  @user = User.find(params[:id])
  respond_to do |format|
    format.json
  end
end