gpt4 book ai didi

ruby-on-rails - 使用 Shrine gem 将图像上传到 s3 中的不同文件夹(按专辑名称)

转载 作者:行者123 更新时间:2023-12-04 23:41:05 26 4
gpt4 key购买 nike

我设法使用 shrine 将文件上传到 s3,但我试图根据它所属的相册将每张照片上传到不同的文件夹。

假设我有一个名为:abc 的存储桶:

上传图片到相册:family应该上传图片到:abc/family/...
上传图片到相册:friends应该上传图片到:abc/friends/...
我在 Shrine.storages 中没有找到方法在初始化文件中。

我想这样做的方法是使用 default_storagedynamic_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_locationImageUploader文件:

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”你需要改变 prefixShrine.storages在初始化文件中。

您可能想使用 parameterizefield_name (在我的情况下 album_name.parameterize )所以你不会在路径中有空格和不需要的字符。

对于任何在那里寻找答案的人!那是什么对我有用,享受。

如果您有其他有效/更好的解决方案,也请发布。
谢谢。

关于ruby-on-rails - 使用 Shrine gem 将图像上传到 s3 中的不同文件夹(按专辑名称),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47802280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com