Railsアプリのファイルアップロード部分の作業をしています。異なるタイプのファイルは、アプリによって異なる方法で処理されます。
特定のファイル拡張子のホワイトリストを作成して、アップロードされたファイルをチェックして、どこに行くべきかを確認したいと思います。ファイル名はすべて文字列です。
ファイル名文字列の拡張子部分のみをチェックする方法が必要です。ファイル名はすべて「some_file_name.some_extension」の形式です。
Railsアプリのファイルアップロード部分の作業をしています。異なるタイプのファイルは、アプリによって異なる方法で処理されます。
特定のファイル拡張子のホワイトリストを作成して、アップロードされたファイルをチェックして、どこに行くべきかを確認したいと思います。ファイル名はすべて文字列です。
ファイル名文字列の拡張子部分のみをチェックする方法が必要です。ファイル名はすべて「some_file_name.some_extension」の形式です。
回答:
それは本当に基本的なことです:
irb(main):002:0> accepted_formats = [".txt", ".pdf"]
=> [".txt", ".pdf"]
irb(main):003:0> File.extname("example.pdf") # get the extension
=> ".pdf"
irb(main):004:0> accepted_formats.include? File.extname("example.pdf")
=> true
irb(main):005:0> accepted_formats.include? File.extname("example.txt")
=> true
irb(main):006:0> accepted_formats.include? File.extname("example.png")
=> false
tar.gz
、などの複数期間のサフィックスでは機能しませんtar.bz2
。
File.extname("example.png").downcase
拡張機能がすべて大文字ではないことを確認するために実行する必要があります
かなり古いトピックですが、拡張セパレーターのドットと後続のスペースの可能性を取り除く方法は次のとおりです。
File.extname(path).strip.downcase[1..-1]
例:
File.extname(".test").strip.downcase[1..-1] # => nil
File.extname(".test.").strip.downcase[1..-1] # => nil
File.extname(".test.pdf").strip.downcase[1..-1] # => "pdf"
File.extname(".test.pdf ").strip.downcase[1..-1] # => "pdf"
"file_with_no_extension".split('.').last
ですか?