【问题标题】:Rails Paperclip cannot save attachment with accented characters in file nameRails Paperclip 无法保存文件名中带有重音字符的附件
【发布时间】:2013-09-29 21:36:45
【问题描述】:

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

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

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

示例:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-18
        • 1970-01-01
        • 2015-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多