2016-08-24 8 views
0

send_fileが呼び出されると、それがブラウザにファイルを送信していますが、ブラウザが新しいページにプレーンテキストとして内容をダンプの代わりにダウンロードしていますファイル。そのページを更新すると、通常どおりファイルがダウンロードされます。Railsの

ルート

get 'download' => 'qr_codes#download' 

コントローラ

def download 
    path = Rails.root.join("events/active/#{params[:name]}/#{params[:batch]}/#{params[:file]}") 
    send_file(path, type: 'application/vnd.ms-excel', filename: params[:file]) 
end 

ビュー

<%= link_to 'Original Upload', download_path(name: @event_name, 
    batch: batch, file: batch_upload_filename(@event_name, batch)) %> 

解決策: これはターボリンクでknown issueになりました。私は同じようTurbolinks 5を使用している場合、更新構文は次のとおりです。data: { turbolinks: false }

答えて

1

は処分を設定してみてください:

def download 
    path = Rails.root.join("events/active/#{params[:name]}/#{params[:batch]}/#{params[:file]}") 
    send_file(path, type: 'application/vnd.ms-excel', filename: params[:file], disposition: 'attachment') 
end 

またはファイルを変更する拡張子が正しい

"#{params[:file][0,params[:file].index(".")]}.xlsx" 

ああとドンであることを確認しますparamsを文字列に挿入してダウンロードするルートを構築します。私は "../../"を:name、 "config"、into:バッチ、 "../config/database.yml" into:ファイルに挿入できます。モデルにファイルパスを追加します。

+0

として

def some_helper(content_type) Rack::Mime::MIME_TYPES.invert[content_type].gsub(/\./mi, '') end 

と更新リンク処分を '添付ファイル' にデフォルト設定されています。とにかくそれを設定しようとしたが、同じ結果が発生しました。私はまたあなたの提案ごとにファイル拡張子が正しいことを保証し、同じ結果を得ました。 –

+0

ここに直接行くと、http:// localhost:3000/download?batch = 1&file = HSS.xls&name = HSS + 2016 "という名前のページが表示されます。プレーンテキストをブラウザーに入れて、ポストで言及したように、プレーンテキストページをリフレッシュして、ファイルを通常どおりダウンロードします。 –

+0

上記の私の投稿を編集して、問題を解決しました。 –

2

これはturbolinksの既知の問題になってしまいました。私は同じようTurbolinks 5を使用している場合、更新構文は次のとおりです。

data: { turbolinks: false } 
0

メイクヘルパーメソッド

<%= link_to 'Original Upload', download_path(name: @event_name, batch: batch, file: batch_upload_filename(@event_name, batch, format: file_format(attachment.file.content_type))) %>