【问题标题】:How do you remove special characters before uploading a file in Rails?在 Rails 中上传文件之前如何删除特殊字符?
【发布时间】:2013-07-30 00:17:34
【问题描述】:

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

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

提前谢谢你


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

【问题讨论】:

    标签: ruby-on-rails carrierwave


    【解决方案1】:

    查看parameterize 方法here

    【讨论】:

    • 您好,感谢您的回复。我知道这一点,但在上传文件之前我一直在寻找一种方法来做到这一点。在上传文件之前如何参数化文件名?
    • 好吧,我从未使用过 Carrierwave,但我猜你会使用 file = whatever.to_file(filename).parameterize.underscore 然后 file.send 或类似的东西。
    • 感谢您的回复,但这个答案不适合我的问题
    【解决方案2】:

    您可以在 *_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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 此时我已经对carrierwave 进行了大量修改,这可能对我不起作用,但谢谢@kspector
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 如何用JS更改文件名?出于安全原因,您实际上不能这样做?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-25
        • 1970-01-01
        • 2015-03-12
        相关资源
        最近更新 更多