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

标签 ruby-on-rails amazon-s3 ruby-on-rails-5 shrine

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

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

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

我想这样做的方法是使用 default_storagedynamic_storage插件不知何故,但我还没有成功。

任何建议/解决方案?

非常感谢 :)

关系: Album has_many :photos Photo belongs_to :albumPhoto类(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/

相关文章:

ruby-on-rails - Ruby Rest 客户端 POST,如何发送 header

mysql - Rails 4 在不区分大小写的情况下验证电子邮件的唯一性

ruby-on-rails - root 应该位于 routes.rb 文件中的什么位置?

amazon-s3 - 如何使用 aws-cli 确定 S3 存储桶是否具有公共(public)访问权限

amazon-web-services - AWS 中不同 AZ 中的多个 Hashicorp Vault 服务器

javascript - 获取所有可见的 CKEditor 实例

ruby-on-rails - Rails 中的关系数据库 : how many references do I need?

ruby-on-rails - 为 Rails 编写元刷新方法

amazon-web-services - 将 AWS S3 存储桶同步到 EC2 服务器

ruby-on-rails - 如何创建一个在 Rails 5 中没有作用域的作用域?