Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails中上载文件之前,如何删除特殊字符?_Ruby On Rails_Carrierwave - Fatal编程技术网

Ruby on rails 在Rails中上载文件之前,如何删除特殊字符?

Ruby on rails 在Rails中上载文件之前,如何删除特殊字符?,ruby-on-rails,carrierwave,Ruby On Rails,Carrierwave,我正在使用Carrierwave x Rails。基本上,我在AmazonS3字符串匹配方面遇到了一些问题&我认为在上传文件之前删除所有特殊字符,例如括号和重音符号(以及空格)会更容易 所以,我想知道的是,在将文件上传到rails之前,如何从文件名中删除特殊字符 先谢谢你 已解决。对于其他面临相同或类似问题的人,请阅读下面我的答案中的解决方案。干杯:)检查参数化方法。尝试打开Uploader类,在底部找到处理文件名的代码。也许您可以在此处调用前面提到的to_params方法: # Overri

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

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

先谢谢你



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

检查
参数化方法。

尝试打开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

如果需要更详细的定制,请查看文档

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

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

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

您可以在您的*\u 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

嘿,谢谢你的回复。我知道这一点,但我正在寻找一种方法,这样做之前上传文件。在上传文件之前,您将如何参数化文件名?嗯,我从未使用Carrierwave,但我猜您可能会执行类似于
file=whatch.to_file(文件名)的操作.parameterize.Underline
然后
file.send
或类似内容。感谢您的回复,但此答案不符合我的问题我已对Carrier进行了大量修改,目前这可能对我不起作用,但谢谢@ksc如何使用JS更改文件名?出于安全考虑,你不能这么做?