1

Carrierwave を使用してファイルを Amazon s3 にアップロードする Rails プロジェクトがあります。

bad URI(is not URI?)などのスペースを含むファイルをアップロードすると、編集操作でエラーが発生しますFile Name.mp3。s3 にアップロードする前に、ファイル名のスペースをアンダースコアに変換するにはどうすればよいですか?

ドキュメントで見つからない構成オプションはありますか、またはこれを行うためのメソッドを作成する必要がありますか?

更新しました:

これが私のuploaders/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}".underscorestack level too deepエラーが発生します。

4

2 に答える 2

3

uploaders / track_uploader.rb:

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

空白文字をアンダースコアに置き換えます。/\W+/または、単語以外の文字(文字、数字、アンダースコアではない)を照合するために使用することもできます。

このメソッドは「@original_filename」に基づいて文字列を生成する以外は何もしないことに注意してください。それでも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 に答える