Как загрузить файл из приложения rails
Я не могу найти простой и ясный ответ на эту проблему в любом месте! Все кажется устаревшим или неполным!
Я просто хочу, чтобы пользователь мог нажать ссылку или кнопку и загрузить файл (то есть где-то в общей папке)
Я пробовал это:
#view
<%= link_to "Raw blast output" ,:action => :download, :file_name => "public/data/02_blastout/#{@bl_file}" %>
#controller
def download
send_file "#{RAILS_ROOT}/#{params[:file_name]}"
end
но я получаю эту ошибку:
No route matches {:action=>"download", :file_name=>"public/data/02_blastout/input0.fa_x_Glyma1aaunq.bl", :controller=>"cvits"}
Спасибо за помощь!
Ответы
Ответ 1
Не используйте send_file
с параметром, заданным пользователем. Это открывает огромную дыру в безопасности, позволяя пользователю получить доступ к любому файлу, который читается вашим приложением (а именно, всем вашим приложением, а также, возможно, другими файлами в файловой системе).
Скорее, если файл находится в открытом доступе, обратитесь к самому файлу. В вашем случае:
<%= link_to "Raw blast output", "/data/02_blastout/#{@bl_file}" %>
Нет необходимости в специальном действии контроллера.