Подтвердить что ты не робот

Как загрузить файл из приложения 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"}

Спасибо за помощь!

4b9b3361

Ответ 1

Не используйте send_file с параметром, заданным пользователем. Это открывает огромную дыру в безопасности, позволяя пользователю получить доступ к любому файлу, который читается вашим приложением (а именно, всем вашим приложением, а также, возможно, другими файлами в файловой системе).

Скорее, если файл находится в открытом доступе, обратитесь к самому файлу. В вашем случае:

<%= link_to "Raw blast output", "/data/02_blastout/#{@bl_file}" %>

Нет необходимости в специальном действии контроллера.