使用Paperclip替换S3中的缩略图样式(Rails 4)

时间:2014-01-10 16:58:49

标签: ruby-on-rails amazon-s3 ruby-on-rails-4 paperclip

这可能是反直觉的,但是我想要替换当前现有的回形针附件样式,或者在has_attached_file代码之外创建一个新样式。 (缩略图存储在S3中)。

我正在使用这个名为SmartCropper的伟大宝石,让我拍摄一张图像,然后围绕焦点裁剪到我选择的尺寸。

它的代码是这样的:

SmartCropper.from_file(banner.url(:medium)).smart_crop(350,630)

它正在使用我已经用回形针(中等大小的横幅)裁剪的缩略图,但我希望此代码覆盖(在S3 Bucket中)横幅中定义的另一种缩略图样式,如裁剪或的拇指即可。

不幸的是,似乎

banner.url(:medium) = SmartCropper.from_file(banner.url(:medium)).smart_crop(350,630)

是一个非常不正确的尝试解决方案。我也仔细阅读了一些用于存储方法的S3 API,我确实找到了,但是没有一个只接受路径和文件。铲斗系统相当于回形针,因此似乎简单的存储方法不是最好的选择。

我尝试过如果我可以将其作为自定义处理器进行研究,但我无法真正找到我想要的内容。

我尝试将缩略图样式更改为新图像时所做的一切都导致了S3错误。

有什么想法?

1 个答案:

答案 0 :(得分:2)

Paperclip方法'url'和'path'只是根据你的路径设置生成字符串。因此,如果您已经上传了文件,则可以使用以下代码获取自定义拇指的路径:

banner.path(:my_custom_style) #this will be the path to save your custom thumb to

这里有两件重要的事情:

  1. 首先,不要在has_attached_file中或默认的Paperclip配置中声明您的样式(即:my_custom_style)。否则,如果您在未指定排除项的情况下运行重新处理,则会丢失自定义大拇指。
  2. 使用'path'代替'url',因为您只需要一条相对于s3存储桶的路径。
  3. 下一步是最简单的一步。如果您正在使用aws-sdk gem,并使用您的凭据配置它,那么将文件上传到指定路径就像下面这样简单:

    s3 = AWS::S3.new
    s3.buckets[YOUR_BUCKET].objects[path].write(binary_data)