2012-10-16 37 views
0

我參考這個應用程序link作爲教程。看完之後。我很想了解程序(客戶端或服務器)如​​何訪問圖像。由於該程序在上載到Amazon S3後似乎沒有明確地將圖像URL保存在服務器的數據庫中?回形針和aws寶石 - 照片共享應用程序哪裏存儲的回形針/ aws?

實施此應用程序後,我沒有看到image_urls或數據庫中的路徑列。但該程序神奇地加載客戶端中的圖像!

引擎蓋下正在發生什麼,這是什麼東西?

這裏是照片模型的方法:

Paperclip.interpolates :prefix do |attachment, style| 
    "#{attachment.instance.takenby}/#{Date.today.to_s }/# 
    {attachment.instance.image_file_name}" 
end 

has_attached_file :image, 
       :path => ":prefix/:style/:basename.:extension", 
       :styles => { :thumbnail => "57x57", :original => "300x300" }, 
       :storage => :s3, 
       :s3_credentials => S3_CREDENTIALS 


    validates :image,:presence => true 
    validates :lat, :lng,:presence => true,:numericality => true 

回答

1

這是正確的,在爲has_attached_file的選項。您已經告訴它如何在:path參數中爲圖像構建路徑(它對應於s3中的文件名)。因此,所有回形針需要知道找到圖像又是:

  1. 您的S3存儲
  2. 相關的信息來重新構建路徑中的主機名 - 在這種情況下,看起來像:prefix:basename:style:extension

大部分信息都在您的數據庫中。據推測:basename以某種方式來自原始文件名,這應該保存在圖像所附模型的image_file_name字段中。 :style取決於您在運行時查找的圖像大小。 :extension可以從image_content_type屬性確定。

:prefix有點棘手。事實上,我擔心你的插值規則會破壞你的圖像查找,因爲它使用Date.today來構造前綴。你有超過一天的圖像嗎?如果是這樣,他們還在工作嗎?我擔心,當圖片上傳時,它會有一個包含當天日期的文件名,然後當你將來去查找它們時,你將使用新的當前日期重建url,並且結束403錯誤。

TL; DR回形針在將圖像上傳到s3時構造圖像url,並稍後從相同參數重建它們。

+0

你打在頭上的指甲。 :前綴是exatcly是什麼導致重建路徑的問題!超過1天的圖像無法檢索。我已經提前並改變了它。我對它是如何工作感到困惑,但現在這一切都有道理。非常感謝你澄清。爲此 – banditKing