我设法使用 shrine 将文件上传到 s3,但我试图根据它所属的相册将每张照片上传到不同的文件夹。
假设我有一个名为:abc
的存储桶:
上传图片到相册:family
应该上传图片到:abc/family/...
上传图片到相册:friends
应该上传图片到:abc/friends/...
我在 Shrine.storages
中没有找到方法在初始化文件中。
我想这样做的方法是使用 default_storage
和 dynamic_storage
插件不知何故,但我还没有成功。
任何建议/解决方案?
非常感谢 :)
关系:
Album has_many :photos
Photo belongs_to :album
Photo
类(class)有image_data
神社的领域。
我在初始化程序中的代码:(基本内容)
s3_options = {
access_key_id: ENV["S3_KEY"],
secret_access_key: ENV["S3_SECRET"],
region: ENV["S3_REGION"],
bucket: ENV["S3_BUCKET"],
}
Shrine.storages = {
cache: Shrine::Storage::S3.new(prefix: "cache", **s3_options),
store: Shrine::Storage::S3.new(prefix: "store", **s3_options),
}
编辑:
我发现有一个插件名为:
pretty_location
它增加了一个更好的文件夹结构,但它不完全是我需要的,它增加了 /Photo/:photo_id/image/:image_name
在存储桶下,但我需要专辑名称。
最佳答案
我做到了!
通过覆盖 generate_location
在 ImageUploader
文件:
class ImageUploader < Shrine
def generate_location(io, context = {})
album_name = context[:record].album_name if context[:record].album
name = super # the default unique identifier
[album_name, name].compact.join("/")
end
end
这会将文件上传到:
:bucket_name/storage/:album_name/:file_name
如果你想要其他文件夹然后“
storage
”你需要改变prefix
下Shrine.storages
在初始化文件中。您可能想使用
parameterize
在 field_name
(在我的情况下 album_name.parameterize
)所以你不会在路径中有空格和不需要的字符。对于任何在那里寻找答案的人!那是什么对我有用,享受。
如果您有其他有效/更好的解决方案,也请发布。
谢谢。
关于ruby-on-rails - 使用 Shrine gem 将图像上传到 s3 中的不同文件夹(按专辑名称),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47802280/