我正在使用 Carrierwave x Rails。基本上,我在 Amazon S3 字符串匹配方面遇到了一些问题,我认为在上传文件之前删除所有特殊字符会更容易,例如括号和重音符号(和空格)。
那么,我想知道的是,在将文件上传到 rails 之前,如何从文件的文件名中删除特殊字符?
先感谢您
解决了。对于面临相同或类似问题的其他人,请在下面的答案中阅读我的解决方案。干杯:)
我正在使用 Carrierwave x Rails。基本上,我在 Amazon S3 字符串匹配方面遇到了一些问题,我认为在上传文件之前删除所有特殊字符会更容易,例如括号和重音符号(和空格)。
那么,我想知道的是,在将文件上传到 rails 之前,如何从文件的文件名中删除特殊字符?
先感谢您
解决了。对于面临相同或类似问题的其他人,请在下面的答案中阅读我的解决方案。干杯:)
在这里查看parameterize
方法。
您可以在 *_uploader.rb 中写入 Carrierwave Method: 文件名:
# 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
尝试打开您的 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 文件中使用了“encodeURI/encodeURIComponent”(我的控制器为“URI.escape”)将我的文件发送到已经编码的 S3,这样 S3 签名将匹配我的字符串