首页 > 解决方案 > Carrierwave:使用空格而不是下划线

问题描述

我们有一个 PDF 上传器。当文件名中包含空格时,它们会自动转换为使用下划线:

some file test->some_file_test

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

我试过:

  def filename
    original_filename
  end

标签: ruby-on-railscarrierwave

解决方案


您可以通过添加空格来覆盖清理正则表达式:

CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+\ ]/

如您所见,此正则表达式用于将禁止符号替换为下划线的sanitize 方法。

来自CarrierWave 文档

文件名和 unicode 字符

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

CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/

还要确保允许非拉丁字符不会导致与第三方插件或客户端软件的兼容性问题。


推荐阅读