0

我将此应用程序链接称为教程。看了之后。我很想了解程序(客户端或服务器)如​​何访问图像。由于程序似乎没有在服务器数据库中明确保存图像 url,一旦它们被上传到 Amazon S3?

实施此应用程序后,我在数据库中看不到 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
4

1 回答 1

1

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

  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,并稍后从相同的参数重建它们。

于 2012-10-16T19:06:11.740 回答