回形针& aws gems - 照片共享应用程序paperclip / aws存储的网址在哪里?

时间:2012-10-16 16:41:50

标签: ruby-on-rails heroku amazon-s3 ios6 paperclip

我将此应用link称为教程。看了之后。我很想知道程序(客户端或服务器)如​​何访问图像。由于该程序在上传到Amazon S3后似乎没有明确地将图像URL保存在服务器的数据库中?

实现此应用程序后,我没有在数据库中看到image_urls或path的列。但该程序神奇地在客户端加载图像!!

引擎盖下发生了什么事,那是什么东西?

以下是Photo模型方法:

 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 个答案:

答案 0 :(得分:1)

has_attached_file的选项就在那里。您已经告诉它如何在:path参数中构建图像的路径(对应于s3上的文件名)。因此,所有回形针需要知道的是再次找到图像:

  1. s3存储桶的主机名
  2. 重构路径的相关信息 - 在这种情况下,看起来像:prefix:basename:style:extension
  3. 大部分信息都在您的数据库中。据推测,:basename以某种方式来自原始文件名,应该保存在图像附加到的模型的image_file_name字段中。 :style取决于您在运行时查找的图像大小。可以从:extension属性确定image_content_type

    :prefix有点棘手。实际上,我担心您的插值规则会破坏您的图像查找,因为它用于构造前缀的Date.today。你有超过一天的图像吗?如果是这样,他们还能工作吗?我担心当图片上传时,它会有一个包含当天日期的文件名,然后当您将来找到它们时,您将使用 new 当前日期重建网址,并且结束403错误。

    TL; DR回形针在将图像上传到s3时构建图像URL,稍后从相同的参数重建它们。