如何使用paperclip存储带有unicode字符的文件

时间:2013-10-08 15:17:16

标签: ruby-on-rails-3 paperclip

我正在使用paperclip gem来处理一些图像并将它们存储到Amazon S3。每个图像代表人的名字。我想添加对具有unicode字符的名称的支持,但由于paperclip无法上传其名称中带有unicode字符的文件,因此无法使其正常工作。 我不能在上传之前将Ñ更改为N,因为那时我将覆盖用字母N上传的图像。 例如。 两个用户:NUÑO和NUNO。我不能只告诉paperclip将NUÑO.jpg上传为NUNO.jpg,因为这会覆盖之前的NUNO.jpg。

这是我非常标准的生产/暂存环境配置:

config.paperclip_defaults = {
  :storage => :s3,
  :url => ':s3_domain_url',
  :path => 'assets/:class/:id/:style.:extension',
  :s3_credentials => {
    :bucket => ENV['AWS_BUCKET'],
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY_ID']
  }
}

这是与图像附件有关的课程:

class NameSpread < ActiveRecord::Base
(...)
  has_attached_file :rendered_image,
    default_url: lambda { |attach| attach.instance.processing_image },
    path: lambda { |attach| attach.instance.save_path },
    styles: { (..) },
    processors: [ :name_spread_processor ],
    default_style: :spread
(...)
end

这是save_path方法:

def save_path
  if Rails.env.production? || Rails.env.staging?
    "assets/:class/#{gender}/#{name}/:style.jpg"
  else
    "#{Rails.root}/public/assets/:class/#{gender}/#{name}/:style.jpg"
  end
end

这是搞砸的部分:#{name}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

经过两天的调试,我找到了解决方案。

我从ruby 1.9.2更新到2.0.0,现在一切正常......