рельсы, как отрисовать файл с правильным именем файла - PullRequest
4 голосов
/ 10 января 2011

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

Я использую рельсы 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» вместо имени файла.

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

Ответы [ 2 ]

8 голосов
/ 10 января 2011

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

send_file path_to_file_on_filesystem, :type => "application/zip", :x_sendfile => true
8 голосов
/ 10 января 2011

Вы хотите использовать send_data с опцией :filename.См. документацию API .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...