回形针自定义插值(也称为AWS S3的自定义路径)

时间:2016-07-29 10:14:24

标签: ruby-on-rails ruby amazon-web-services amazon-s3 paperclip

我有三个与paperclip和AWS S3相关的问题。

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

has_attached_file :attachment,
    :url => "/songs/:user_id/:basename.:extension",
    :path => "/songs/:user_id/:basename.:extension"

URL和PATH之间的区别是什么?

2)什么是:basename.:extension

3)我们假设有两种模式:UserFileUser有很多File。回形针路径和网址在File模型中配置。

config/initializers/paperclip.rb中,我将代码放在下面:

Paperclip.interpolates :user_id do |attachment, style|
    attachment.instance.criteria.user_id
end

我确认上面的代码工作正常。我的文件保存在songs/5/song.mp3。我想将mp3文件保存在songs/user_id_5/song.mp3。我试过在下面做,但它不起作用。

Paperclip.interpolates :user_id do |attachment, style|
    'user_id_' + attachment.instance.criteria.user_id
end

我如何按照自己的意愿制作?

1 个答案:

答案 0 :(得分:0)

  1. 在S3语言中path是您项目的关键,url是您的s3端点
  2. 来自docs

      
        
    • url:S3网址有四个选项。您可以选择将存储桶的名称放置为域样式(bucket.s3.amazonaws.com)或   路径式(s3.amazonaws.com/bucket)。您还可以指定CNAME   (需要将CNAME指定为:s3_alias_url。您可以   阅读更多关于CNAME和S3的信息   docs.amazonwebservices.com/AmazonS3/latest/index.html?VirtualHosting.html   通常情况下,这无关紧要,你可以离开   default(路径样式或:s3_path_url)。但在某些情况下   路径不起作用,您需要使用域样式   (:s3_domain_url)。此处的任何其他内容都将被视为路径风格。

    •   
    • 路径:这是存储文件的存储区下的密钥。 URL将从存储桶和路径构造。这是您想要插入的内容。键应该是唯一的,比如文件名,尽管S3(严格来说)不支持目录,但您仍然可以使用/来分隔文件名的部分。

    •   

    您可以在配置中配置bucketurl,并在调用方法时传递path(即存储文件的位置)

    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',
      }
    }
    
    1. 我不知道

    2. 您需要字符串插值

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