rails 3 paperclip处理器水印错误的文件名

时间:2012-12-07 20:27:08

标签: ruby ruby-on-rails-3 paperclip

我在rails 3中的paperclip有问题。当我上传文件时,我的处理器抛出错误,因为imagemagick get命令:

“composite -gravity South /home/xxx/xxx/public/images/watermark.png / tmp / a s20121207-5819-1dq7y81.jpg / tmp / a s20121207-5819-1dq7y8120121207-5819-1juqw7a”

复合:无法打开图像`/ tmp / a':

处理器:

def make
  dst = Tempfile.new([@basename, @format].compact.join("."))
  dst.binmode

  if @watermark_path
    command = "composite"
    params = "-gravity #{@position} #{@watermark_path} #{fromfile} "
    params += tofile(dst)
    begin
      p " >>>>>>>>>>>>>>>>> #{command} #{params}"
      success = Paperclip.run(command, params)
    rescue PaperclipCommandLineError
      success = false
    end
    unless success
      raise PaperclipError, "There was an error processing the watermark for #{@basename}" if @whiny
    end
    return dst
  else
    return @file
  end
end

def fromfile
  File.expand_path(@file.path)
end

def tofile(destination)
  File.expand_path(destination.path)
end

只有当文件名有空格或其他非alfanum字符时才会出现。 / tmp / a应为/ tmp / a b.jpg。

我已尝试http://www.davesouth.org/stories/make-url-friendly-filenames-in-paperclip-attachments以及更多,但处理器中的文件名仍然错误

任何想法?或处理器可以解决这个问题吗? :(

2 个答案:

答案 0 :(得分:0)

尝试使用:

dst = Tempfile.new([@basename, @format].compact.join(".").gsub(" ","")

答案 1 :(得分:0)

我今天回到这里,并想出你只需要在ImageMagic文档(http://www.imagemagick.org/script/command-line-processing.php)中用引号括起路径:

If the image path includes one or more spaces, enclose the path in quotes:

'my title.jpg'

例如,在我的处理器中,我有:

command = "convert \"#{File.expand_path(@file.path)}\" -crop #{crop_area} -resize 150x150 \"#{File.expand_path(destination.path)}\""

Paperclip.run(command)

我目前在Windows上,单引号似乎不起作用。 和你一样,我尝试更改@file的属性但没有成功。

希望它有所帮助。