2012-07-25 24 views
12

ファイルのアップロード/ダウンロードが必要なRuby on Railsアプリケーションを開発しています。アップロードのために、私はgem carrierwaveを使用しました。これは非常に使いやすくフレキシブルであるためです。問題は次のとおりです。ファイルをアップロードしたら、いくつかのことを知っておく必要があります。すなわち、ファイルをダウンロードする代わりにPDFファイルをダウンロードし、インラインで表示し、イメージファイルをダウンロードします。 ファイル拡張子を入手するにはどうすればいいですか?ファイルにを送信しますか?ご意見はありがとうございます!Carrierwaveファイルの拡張子を取得する方法

答えて

30

(私はマウントアップローダーの名前が 'ファイル' であると仮定)ファイルの拡張子を決定します。

file = my_model.file.url 
extension = my_model.file.file.extension.downcase 

そして、パントマイムや配置はvarsの準備:

disposition = 'attachment' 
mime = MIME::Types.type_for(file).first.content_type 

if %w{jpg png jpg gif bmp}.include?(extension) or extension == "pdf" 
    disposition = 'inline' 
end 

(あなたがしたい場合は、他の拡張子を追加) 。

し、ファイル送信:返信用

send_file file, :type => mime, :disposition => disposition 
+0

ありがとう、私はあなたのソリューションのスタイルが好きで、それは完全に機能しました。再び、返信いただきありがとうございます! – Wiggin

+0

railsプロジェクトファイルのどこに、処理とMIMEタイプvarsを配置するのですか? – maumercado

2

ファイルをアップロードすると、名前がデータベースに保存されます。これには拡張も含まれます。それをユーザーに送信するよう

user.asset.file.extension 

あなたがuser.asset_urlを呼び出す場合、それはあなたのファイルがあるURLを与えるだろう。そして、あなたのようにそれを得ることができ、投稿者とUserモデルがassetとしてマウントされていると仮定すると、アップロードされました。ユーザーはそのリンクを使用してファイルを取得できます。あるいは、「ファイルをユーザーに送信する」ということを誤解していますか?

+0

感謝を!まあ、私はユーザーにファイルをダウンロードさせたい。あなたは知っている、ダイアログをdonwload(開いて..またはそれを保持するか、またはクロムケースの保持または拒否。)私は、パラメータを持つ単純なsend_fileで大丈夫だろうと思った。 – Wiggin

+0

さて、ファイルにリンクするだけです。あなたは 'user.asset_url'でURLを得ることができます。 –

+0

うん、私はそれをやった!あなたの助言は完璧に働いた、ありがとう! – Wiggin

関連する問題