Ziv*_*ili 1 ruby-on-rails amazon-s3 ruby-on-rails-5 shrine
我设法使用shrine将文件上传到s3,但是我试图根据它所属的相册将每张照片上传到不同的文件夹.
让我们说我有一个名为abc::
将图像上传到相册:family应将图像上传到:abc/family/...
将图像上传到相册:friends应将图像上传到:abc/friends/...
我没有找到Shrine.storages在初始化文件中执行此操作的方法.
我想这样做的方法是以某种方式使用default_storage和dynamic_storage插件,但我还没有成功.
任何建议/解决方案?
非常感谢 :)
关系:
Album has_many :photos
Photo belongs_to :album
Photo上课有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),
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我发现有一个名为的插件: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
Run Code Online (Sandbox Code Playgroud)
这会将文件上传到: :bucket_name/storage/:album_name/:file_name
如果希望其他文件夹,然后" storage"你需要改变prefix下Shrine.storages的初始化文件.
您可能需要使用parameterize的field_name(在我的情况album_name.parameterize),所以你不会路径中有空格和不想要的字符.
对于那里寻找答案的人!这对我有用,享受.
如果您有其他工作/更好的解决方案,请发布它.谢谢.
| 归档时间: |
|
| 查看次数: |
707 次 |
| 最近记录: |