我创建了一个带有视图和API控制器的混合Rails 5.2应用程序。由于活动存储和S3,我允许用户上传文件。
我的活动存储服务确实会在我的Rails视图中生成S3图像URL,如日志中所示:
密钥下文件的生成URL:HsBwx3LiGxmSJtDB2pu9nEiJ(https://[DOMAIN_NAME].s3.ca-central-1.amazonaws.com/HsBwx3LiGxmSJtDB2pu9nEiJ?response-content-disposition= ....
不幸的是,在API方面,图片网址如下所示:
/ rails / active_storage / blobs /...
想法是在Vue SPA中使用此API。
模型
我的模型非常简单:1 产品模型为has_one_attached :image
。
序列化器
我正在使用序列化器来显示该图像,例如:
include Rails.application.routes.url_helpers
...
def image
rails_blob_path(object.image, only_path: true) if object.image.attached?
end
API控制器
在我的API控制器中,我将产品渲染为json,例如:
def index
@products = Product.all
render json: @products, each_serializer: ::ProductSerializer, status: :ok
end
配置
我在Heroku上托管,所有环境。 vars。被设置。 我的生产设置看起来还不错:
config.active_storage.service = :amazon
在Postman和我的Vue应用程序中进行测试,仍然获得该Rails博客URL,而不是亚马逊URL。
感谢您对我在这里缺少的内容的反馈。
谢谢
答案 0 :(得分:0)
解决了。在我的序列化器中,而不是:
def image
rails_blob_path(object.image, only_path: true) if object.image.attached?
end
我正在使用Active Storage service_url
方法,例如:
def image
object.image.service_url if object.image.attached?
end