我正在使用Activestorage。我想检索S3密钥以交给微服务。我不想在Rails应用程序中下载blob或任何类似的东西,我只想在API请求中提供文件路径/密钥。
因为我已经可以访问微服务中的桶,而且这些是大型文件,我不需要不必要地传输它们,所以
我的选择是什么?
"最初的回答"
因为我已经可以访问微服务中的桶,而且这些是大型文件,我不需要不必要地传输它们,所以
service_url
有点过于复杂了。我的选择是什么?
"最初的回答"
service_url
有点过于复杂了。使用service_url
不仅是过度设计,而且在尝试在ActiveStorage控制器之外使用它时会遇到问题,正如此处所述。
更好的解决方式是使用ActiveStorage#key,对于S3,它将仅返回对象的S3密钥。它仍然不是您应该用于公共值的“预期”方法 - ActiveStorage#signed_id
将为您提供railsy键。但是,如果您想要原始的S3密钥(就像我为服务API所做的那样),则key
可以工作,并且在控制器之外也不会出现错误。
因此,在您的情况下:
def logo_key_on_s3
logo.key
end
应该可以正常工作。
ActiveStorage
替换文件夹路径到S3的一个方法。太棒了! - undefinedclass User < ApplicationRecord
has_one_attached :logo
def logo_key_on_s3
logo&.service_url&.split('?')&.first
end
end
bucket/folder/image.jpg
。 - undefined