2011-01-10 8 views
4

Это сложно объяснить, поэтому я буду стараться изо всех сил и, надеюсь, отредактировать вопрос, если людям нужна дополнительная информация. Я не предоставляю точный код, а всего лишь пример проблемы.рельсы, как визуализировать файл с правильным именем файла

Я пользуюсь рельсами 2.3.8. Я нахожусь в Unix.

У меня есть куча файлов под каталогом, доступным не Apache. (т. е. /data/files/file.rpk)

У меня есть следующее на мой взгляд.

link_to "RPK File", :controller => 'mycontroller', :action=> 'myaction', :file => '/data/files/file.rpk' 

У меня в контроллере есть следующее.

def myaction 
    if FileTest.exists?(params[:file]) 
    render :file => params[:file] 
    end 
end 

Когда я выбрать ссылку на страницу я получить приглашение скачать для моего нужного файла, но имя файла «MyAction» вместо имени файла.

Мысли о том, как я мог правильно его назвать?

ответ

8

Звучит как работа для send_file. Параметр x_sendfile предотвращает занятие ваших работников во время передачи фактического файла. Вы можете узнать больше об этом в this blogpost.

send_file path_to_file_on_filesystem, :type => "application/zip", :x_sendfile => true 
+0

Ах, да, 'send_file' является более подходящим выбором здесь. Хорошо поймал. –

+0

Работал для меня! Спасибо! –

8

Вы хотите использовать send_data с опцией :filename. См. API documentation.

Вы хотите быть крайне осторожным с этим, тем не менее. Никогда не доверяйте клиенту/пользователю! Они отправят file=../../../../etc/group или что-то в этом направлении, чтобы прочитать произвольные файлы в вашей системе, поэтому будьте уверены, что это необходимо для дезинфекции, прежде чем передавать его любым методам чтения файлов.

+0

Это был полезный ответ. – Kirby

Смежные вопросы