RoR:设置PaperClip图像模型:正确显示S3存储桶的路径

时间:2015-01-14 09:56:35

标签: ruby-on-rails amazon-s3 paperclip cdn amazon-cloudfront

在我的Rails 4应用程序中,我使用PaperClip将我的图像存储在S3上。我在S3存储桶中的任何图像都是这样的:

https://mybucketname.s3.amazonaws.com/images/files/000/001/920/original/40a6885fc09c8ed4e1e3745d7f7fb770.jpg

现在,为了通过 AWS CloudFront CDN 提供图片,我正在关注this article建议在我的图片模型中设置:path属性。这里的确切价值是什么?

has_attached_file :file, styles: { small: '120x50', medium: '350x350' }, :path => "images/files/../../:id/:style/:filename"

具体来说,我不确定如何处理上面图片网址中的 / 000/001 / 部分。因为这些是PaperClip在S3上保存图像时创建的任意文件夹。否则,:id, :style and :filename正在运行时正确替换它们的值。

3 个答案:

答案 0 :(得分:0)

使用文件系统时,每个文件夹中可存储的文件数量存在限制

在Linux系统上,如果要在文件夹中存储超过32,000个文件,则会收到错误消息。 出于这个原因,paperclip自动将您的文件分区为单独的文件夹,这就是上面示例中000/001/920所做的事情.....这是必要的。

它取对象id为1920,并在其前面加上0来获得9位数,然后将它们分成不同的分区。如果您必须手动设置路径,而不是让回形针处理此逻辑,您还必须手动对文件进行分区,否则最终会遇到大问题。

答案 1 :(得分:0)

我认为您不需要做任何事情:路径,您需要确保config.action_controller.asset_host指向您的CloudFront域名,而不是S3

答案 2 :(得分:0)

您正在寻找的符号是:id_partition。

所以整条路径都是

images/files/:id_partition/:style/:filename