Rails Paperclip无法使用文件名中的重音字符保存附件

时间:2013-09-29 21:36:45

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

使用Windows,使用Rails v3.2.11,Ruby v1.9.3p0,Paperclip AFAIK的最新稳定版本。

文件名:“2011-rosé-750mL.png”

我正在尝试更新我的网站,在此过程中,我需要将回形针存储的所有图像(原件)移动到其他位置。所以基本上我正在阅读每个原始文件并设置附件,然后在模型上运行save。显然,paperclip在使用重音字符保存上传文件时没有任何问题,但是当通过引用带有重音字符的名称保存新文件时,会发生一些不好的事情。

示例:

w = Wine.find(19)
w.photo = File.open("D:/Files/Websites/rails3.website/public/images/store/products/original/2011-rosé-750mL.png", 'rb')
w.save :validate => false

大多数升级过程都有效,直到我找到具有上述名称的文件。我得到的错误是:没有这样的文件或目录 - ... / 2011-rosé-750mL

enter image description here

我能想到的是它与名称中的文件字符编码有关 - 这样当回形针在保存时尝试读取文件时,它不会使用正确的字符。 File.open(source, 'rb')实际上有效(不会抛出任何错误),只是在保存模型时会出现此错误。查看错误消息,它引用了原始文件的保存目录,而不是我执行File.open()时正在读取的目录;所以它在某个地方,但似乎不受我的控制(Paperclip内部)。

2 个答案:

答案 0 :(得分:0)

这是一个字符编码问题。我用过这个宝石:

https://github.com/saepia/paperclip-strip-strange-characters

这是非常有效的,但是我不确定这些版本的ruby和rails会得到什么结果。值得一试。

答案 1 :(得分:0)

根据trh的回复,我决定通过使用函数ActiveSupport::Inflector.transliterate重命名所有文件。此外,Paperclip文件现在默认为音译(不再使用文件名中的重音字符)。