2016-07-29 85 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」...',那麼路徑的值是多少? –