1

Rails 4でファイルをアップロードしたいのですが、アップロードする前にファイル拡張子を確認できません。

注: ファイルをうまくアップロードできます が、アップロードする前にファイルの種類を取得したい

アプリの別のステップで拡張機能が必要だからです。

コマンドを使用しようとしています

File.extname(params[:Upload])

しかし、常にエラーが発生しました

can't convert ActionDispatch::Http::UploadedFile into String

また、アップロードする前にファイルのベース名を取得するにはどうすればよいですか?? 使おうとしたとき

File.basename(params[:Upload])

同じエラーが発生しました

can't convert ActionDispatch::Http::UploadedFile into String

また、名前をStingに変換しようとしたとき、何も得られません

4

2 に答える 2

5

これFile.extnameは、文字列のファイル名を期待しているが、アップロードされたファイルであるためです (あなたparams[:upload]はオブジェクトであり、ActionDispatch::Http::UploadedFileクラスのインスタンスです (一種の一時ファイル))。

問題を解決するには、オブジェクトのpathプロパティを呼び出す必要があります。params[:upload]

File.extname(params[:Upload].path)

ところで、アップロードされたファイルのタイプを取得しようとしている場合は、params[:Upload].content_type代わりに を確認することをお勧めします。なりすましはより困難です。

于 2014-02-09T23:58:10.353 に答える
0

これを使用できます:

params[:Upload].original_filename.split('.').last

original_filenameには、拡張子付きの完全なファイル名が含まれます。

したがって、に基づいて分割し'.'、最後のインデックスにはファイル拡張子が含まれます。

例えば: "my_file.doc.pdf".split('.').last # => 'pdf'

詳細については、これを確認できますActionDispatch::Http::UploadedFile

于 2020-11-05T11:14:32.480 に答える