在Rails中上传文件之前如何删除特殊字符?

时间:2013-07-30 00:17:34

标签: ruby-on-rails carrierwave

我正在使用Carrierwave x Rails。基本上,我遇到了一些亚马逊S3字符串匹配和问题的问题。我认为删除所有特殊字符会更容易,例如括号和&上传文件前的重音符号(和空格)。

那么,我想知道的是在将文件上传到rails之前如何从文件的文件名中删除特殊字符?

提前谢谢


解决。对于遇到相同或类似问题的其他人,请在下面的答案中阅读我的解决方案。干杯:)

5 个答案:

答案 0 :(得分:2)

查看parameterize方法here

答案 1 :(得分:0)

尝试打开你的Uploader类,找到底部的代码来处理文件名。也许你可以在那里调用前面提到的to_params方法:

# Override the filename of the uploaded files:
# Avoid using model.id or version_name here, see uploader/store.rb for details.
  def filename
    original_filename.to_param if original_filename?
  end

如果您需要更详细的自定义

,请查看文档here

答案 2 :(得分:0)

请使用正则表达式删除参数。

word = "did & I ^% helped"
word.gsub(/[^a-z0-9]/i, '')
result => "didIhelped"

答案 3 :(得分:0)

对其他人来说,这就是我解决问题的方法:我基本上在我的js文件中使用“encodeURI / encodeURIComponent”(我的控制器使用“URI.escape”)将我的文件发送到已编码的S3&这样S3签名就会匹配我的字符串

答案 4 :(得分:0)

您可以在* _uploader.rb中写入Carrierwave方法:filename:

  # Override the filename of the uploaded files:
  # Avoid using model.id or version_name here, see uploader/store.rb for details.
  def filename
    original_filename.gsub(/([\s\-_\[\]\{\}\*\']|%20)+/i, "-") if original_filename
  end