1

我有一个 Rails 项目,我使用 Carrierwave 将文件上传到 Amazon s3。

当我上传包含空格的文件时,我的编辑操作出现bad URI(is not URI?)错误,例如File Name.mp3. 在上传到 s3 之前,如何将文件名中的空格转换为下划线?

是否有我在文档中找不到的配置选项,或者我是否需要创建一个方法来执行此操作?

更新:

这是我的上传者/track_uploader.rb:https://gist.github.com/leemcalilly/5025757

这是我将文件附加到的模型:https ://gist.github.com/leemcalilly/5025731

这是我的控制器:https ://gist.github.com/leemcalilly/5025765

请注意,当我"#{original_filename}".underscore在上传器中使用文件时,文件上传正常,但它不会转换文件名,它只是将原始文件名与空格一起保留,如下所示:https ://www.evernote.com/shard/s3/sh/ c5a08968-6f6d-4de8-a768-830a378572bc/10ee719307f3c587b531a37868127209

如果我使用"#{filename}".underscore我会得到一个stack level too deep错误。

4

2 回答 2

3

上传者/track_uploader.rb:

def filename
  "#{@original_filename}".gsub(/\s+/, '_')
end

用下划线替换任何空白字符。或者,您可以使用/\W+/匹配非单词字符(不是字母、数字或下划线)。

请记住,此方法除了生成基于“@original_filename”的字符串之外什么也不做。您仍然必须设置文件名属性。

您是否尝试过以下操作?

def fix_filename
  @original_filename.gsub!(/\s+/, '_')
end
于 2013-02-24T21:42:36.230 回答
1

尝试使用parameterize方法。这种方法会使uri人友好uri

例如:

>> "http://songs.com/my file.mp3".parameterize
=> #<ActiveSupport::Multibyte::Chars:0xef4eb5c @wrapped_string="http-songs-com-my-file-mp3">
>> "http://songs.com/my file.mp3".parameterize.to_s
=> "http-songs-com-my-file-mp3"
于 2013-02-24T20:51:59.720 回答