Ruby on rails Carrierwave:使用空格而不是下划线

Ruby on rails Carrierwave:使用空格而不是下划线,ruby-on-rails,carrierwave,Ruby On Rails,Carrierwave,我们有一个PDF的上传程序。当文件名中有空格时,它们将自动转换为使用下划线: 一些文件测试->一些文件测试 我想保留空间。有人能告诉我怎么做吗 我试过: def filename original_filename end 尝试: original\u filename.gsub(“\u”,”) 更新(可能的解决方法): 在将下划线传递给carrierwave之前,将其替换为文件名中不需要的字符或字符串(例如“xyxyxyxyxyxyz”) 稍后将下划线替换为空格,将特殊

我们有一个PDF的上传程序。当文件名中有空格时,它们将自动转换为使用下划线:

一些文件测试
->
一些文件测试

我想保留空间。有人能告诉我怎么做吗

我试过:

  def filename
    original_filename
  end
尝试:

original\u filename.gsub(“\u”,”)

更新(可能的解决方法):

  • 在将下划线传递给carrierwave之前,将其替换为文件名中不需要的字符或字符串(例如“xyxyxyxyxyxyz”)
  • 稍后将下划线替换为空格,将特殊字符替换为下划线:
您可以通过添加空白来覆盖:

CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+\ ]/
如您所见,此regexp用于
清理
,它将禁止的符号替换为下划线

发件人:

文件名和unicode字符

您应该注意的另一个安全问题是文件名(请参阅)。默认情况下,CarrierWave仅提供英文字母、阿拉伯数字和一些符号作为文件名中的白名单字符。如果您想支持本地脚本(西里尔字母、带变音符号的字母等),则必须重写
sanitize\u regexp
方法。它应该返回与所有不允许的符号匹配的正则表达式

CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/
另外,请确保允许使用非拉丁字符不会导致与第三方插件或客户端软件的兼容性问题


我想保留实际上有下划线的文件名…只是不将空格转换为下划线这有点棘手,但您可以在上面一行加上if条件,只有当您的原始_文件名不等于文件夹中存在的任何文件名时,才允许执行此操作?这就是我所能想到的。sleepy:P感谢您花时间提供帮助,但使用类重写是一个更好的解决方案。
CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+\ ]/
CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/