2011-09-07 69 views
10

我使用Thoughtbot的Paperclip gem来处理文件上传。回形针会自动清理文件名吗?

我发现当我用文件名中的空格上传一个文件时,它将被空格替换为下划线。

这很好。

我也试着上传一个带有特殊字符的文件,如~等等,它们都被替换为下划线。

太好了。正是我想要的。

但为什么会发生?

我做的在我的模型是...

has_attached_file(
    file_somefile, 
    :path => ":rails_root/public/system/other/path/elements/:basename.:extension" 
) 

这是回形针的默认行为?

+0

什么是操作系统?在OS X上,我获得文件名w /原始空间和波浪号。 –

+0

我使用的是OS X,回形针2.3.1.1 – Ethan

+0

嗯。我没有明确地设置我测试的应用程序的路径,除此之外,我也没有做任何事情。目前无法检查我的版本,但我没有在Gemfile中指定版本,所以可能是2.4.1ish。 –

回答

6

好吧,经过多一点搜索,我发现this blog post说,在底部,回形针实际上做一些文件名的最小处理。

11

要添加更多一点的信息,这种情况发生在Paperclip::Attachment#cleanup_filename其中默认restricted_characters/[& $ +,/:; = @ <> [] {} \ | \\ ^〜%#] /替换与下划线。

它没有记录,但您可以指定:restricted_characters选项来回形针来更改被替换的内容,例如:

class User < ActiveRecord::Base 
    attr_accessible :avatar 
    has_attached_file :avatar, :restricted_characters => /@/ # only replaces '@' 
end 
+0

更新指向[Paperclip :: Attachment#cleanup_filename]的链接(https://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/attachment.rb#L605) – nnattawat