【发布时间】:2014-05-16 21:13:04
【问题描述】:
如果上传内容存储在本地,则此代码可以正常工作,但有时它们位于 S3 上,因此无法仅使用 source: "#{File.expand_path(src.path)}[0]"。如何让 Paperclip 的 run 方法从 S3 加载图像并在之后替换它们?
module Paperclip
class KskCrop < Processor
def initialize(file, options = {}, attachment = nil)
super
@crop = options
@format = File.extname(@file.path)
@basename = File.basename(@file.path, @format)
end
def make
src = @file
dst = Tempfile.new([@basename, @format])
dst.binmode
parameters = []
parameters << ":source"
parameters << "-crop '#{@crop[2]}x#{@crop[3]}+#{@crop[0]}+#{@crop[1]}'"
parameters << ":dest"
parameters = parameters.flatten.compact.join(' ').strip.squeeze(' ')
success = Paperclip.run('convert', parameters, source: "#{File.expand_path(src.path)}[0]", dest: File.expand_path(dst.path))
dst
end
end
end
【问题讨论】:
-
您可以在 s3 使用 url 用于任何上传的图像,但它们是否被上传,如果是,那么您可以简单地使用 @image.avatar.url 访问,其中头像是带有 has_attached_file:avatar 的回形针附件。 .请参阅下文了解更多信息
-
src.path上传到 s3 时会给出什么?是相对路径吗?还是完整的路径? -
@Surya 这是一个相对路径 "/assets/files/000/000/583/original/Screen_Shot_2014-05-13_at_16.59.42.png"
-
你可以试试:src.url 吗?如果可以,请执行以下操作:stackoverflow.com/a/2517286/645886 然后处理它。老实说,我不认为是否可以在 CDN 上处理图像。您必须在服务器上拥有该图像(如果它是您运行操作的本地系统则更好)。
-
@Surya 感谢它的帮助。我已经回答了这个问题以说明需要做什么。您还可以提交答案并获得赏金
标签: ruby-on-rails amazon-s3 paperclip