Ruby on rails 回形针自定义插值(AWS S3的自定义路径)

Ruby on rails 回形针自定义插值(AWS S3的自定义路径),ruby-on-rails,ruby,amazon-web-services,amazon-s3,paperclip,Ruby On Rails,Ruby,Amazon Web Services,Amazon S3,Paperclip,我有三个关于回形针和AWS S3的问题 1) 在我的带有回形针的模型中,我有以下代码: has_attached_file :attachment, :url => "/songs/:user_id/:basename.:extension", :path => "/songs/:user_id/:basename.:extension" URL和路径之间有什么区别 2) 什么是:basename.:分机 3) 假设有两种模型:User和File用户有许多文件。回形

我有三个关于回形针和AWS S3的问题

1) 在我的带有回形针的模型中,我有以下代码:

has_attached_file :attachment,
    :url => "/songs/:user_id/:basename.:extension",
    :path => "/songs/:user_id/:basename.:extension"
URL和路径之间有什么区别

2) 什么是
:basename.:分机

3) 假设有两种模型:
User
File
<代码>用户有许多
文件
。回形针路径和url在
文件
模型中配置

config/initializers/paperclip.rb
中,我输入了以下代码:

Paperclip.interpolates :user_id do |attachment, style|
    attachment.instance.criteria.user_id
end
我确认上述代码工作正常。我的文件保存在
songs/5/song.mp3
。我想将mp3文件保存在
songs/user\u id\u 5/song.mp3
。我试着在下面做,但不起作用

Paperclip.interpolates :user_id do |attachment, style|
    'user_id_' + attachment.instance.criteria.user_id
end
我怎样才能做到我想要的

  • 在S3语言中,
    path
    是项目的键,
    url
    是S3端点
    • url:S3URL有四个选项。您可以选择以域样式(bucket.s3.amazonaws.com)或 路径样式(s3.amazonaws.com/bucket)。您还可以指定CNAME (这要求将CNAME指定为:s3\u alias\u url。您可以 更多关于CNAMEs和S3的信息,请访问 docs.amazonwebservices.com/AmazonS3/latest/index.html?VirtualHosting.html 通常,这一点都不重要,你可以离开办公室 默认值(即路径样式或:s3\u path\u url)。但在某些情况下 路径不起作用,您需要使用域样式 (:s3\u domain\u url)。此处的任何其他内容都将被视为路径样式

    • 路径:这是存储文件的bucket下的键。URL将由bucket和路径构建。这是您要插入的内容。键应该是唯一的,就像文件名一样,尽管S3(严格地说)是不支持目录,您仍然可以使用/分隔文件名的各个部分

    您可以在配置中配置
    bucket
    url
    ,调用方法时只需传递
    路径(即存储文件的位置)

    config.paperclip_defaults = {
      storage: :s3,
      s3_credentials: {
        bucket: 'mybucket'),
        access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
        secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
        s3_region: 'aws_region_id',
      }
    }
    
  • 我不知道

  • 你需要字符串插值

    Paperclip.interpolates :user_id do |attachment, style|
      "user_id_#{attachment.instance.criteria.user_id}"
    end
    
  • 在S3语言中,
    path
    是项目的键,
    url
    是S3端点
    • url:S3URL有四个选项。您可以选择将bucket的名称放在域样式(bucket.S3.amazonaws.com)或 路径样式(s3.amazonaws.com/bucket)。您还可以指定CNAME (这要求将CNAME指定为:s3\u alias\u url。您可以 更多关于CNAMEs和S3的信息,请访问 docs.amazonwebservices.com/AmazonS3/latest/index.html?VirtualHosting.html 通常,这一点都不重要,你可以离开办公室 默认值(即路径样式或:s3\u path\u url)。但在某些情况下 路径不起作用,您需要使用域样式 (:s3\u domain\u url)。此处的任何其他内容都将被视为路径样式

    • 路径:这是存储文件的bucket下的键。URL将由bucket和路径构建。这是您要插入的内容。键应该是唯一的,就像文件名一样,尽管S3(严格地说)是不支持目录,您仍然可以使用/分隔文件名的各个部分

    您可以在配置中配置
    bucket
    url
    ,调用方法时只需传递
    路径(即存储文件的位置)

    config.paperclip_defaults = {
      storage: :s3,
      s3_credentials: {
        bucket: 'mybucket'),
        access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
        secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
        s3_region: 'aws_region_id',
      }
    }
    
  • 我不知道

  • 你需要字符串插值

    Paperclip.interpolates :user_id do |attachment, style|
      "user_id_#{attachment.instance.criteria.user_id}"
    end
    

  • 因此,如果在
    has attached\u file
    方法中有
    :path=>“:user\u id”…
    ,path的值是多少?如果在
    has attached\u file
    方法中有
    :path=>“:user\u id”…
    ,path的值是多少?