2016-07-29 87 views
0

我有三个与回形针和AWS S3相关的问题。回形针自定义内插(也称为AWS S3的自定义路径)

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

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

什么是URL和路径之间的区别?

2)什么是:basename.:extension

3)假设有两种型号:UserFileUser有很多File。回形针路径和URL在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 

我该如何做到这一点?

回答

0
    在S3语言 path
  1. 是你的项目的重点和url是你的S3端点

docs

  • 网址:对于S3的URL四个选项。您可以选择将存储桶的名称放置为域样式(bucket.s3.amazonaws.com)或 路径样式(s3.amazonaws.com/bucket)。您还可以指定一个CNAME (这需要CNAME被指定为:s3_alias_url在 docs.amazonwebservices.com/AmazonS3/latest/index.html?VirtualHosting.html 通常你可以 阅读更多有关CNAME记录和S3,这无关紧要,你可以保留 默认值(这是路径样式,或者:s3_path_url)。但是在某些情况下, 路径不起作用,你需要使用域样式 (:s3_domain_url )。这里的其他内容将被视为路径样式。

  • path:这是存储文件的存储区下的关键字,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', 
    } 
} 
  • 我不知道

  • 你需要串插

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

    对于#3,字符串不起作用。不知道为什么。 – JoHksi

    +0

    所以如果你的'has_attached_file'方法中有':path =>“:user_id”...',那么路径的值是多少? –