我将此应用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
答案 0 :(得分:1)
has_attached_file
的选项就在那里。您已经告诉它如何在:path
参数中构建图像的路径(对应于s3上的文件名)。因此,所有回形针需要知道的是再次找到图像:
:prefix
,:basename
,:style
和:extension
。大部分信息都在您的数据库中。据推测,:basename
以某种方式来自原始文件名,应该保存在图像附加到的模型的image_file_name
字段中。 :style
取决于您在运行时查找的图像大小。可以从:extension
属性确定image_content_type
。
:prefix
有点棘手。实际上,我担心您的插值规则会破坏您的图像查找,因为它用于构造前缀的Date.today
。你有超过一天的图像吗?如果是这样,他们还能工作吗?我担心当图片上传时,它会有一个包含当天日期的文件名,然后当您将来找到它们时,您将使用 new 当前日期重建网址,并且结束403错误。
TL; DR回形针在将图像上传到s3时构建图像URL,稍后从相同的参数重建它们。