Я пытаюсь служить динамично сгенерированным файлам в приложении для направляющих, поэтому когда пользователь нажимает на определенную ссылку, файл сгенерирован и отправлен клиенту, использующему send_data.
Файл не предназначается, чтобы быть снова использованным: файл краткого текста, и регенерация должна быть действительно недорогой, поскольку это не будет donwloaded так очень; но если это необходимо или удобно, что я мог бы сохранить его в базе данных, так только сгенерирован однажды.
Во-первых, я хотел бы генерировать файл в памяти и отправить его в контроллере. Я пытаюсь заархивировать что-то вроде этого:
def DownloadsController < ApplicationController
def project_file
project = Project.find(params[:id])
send_data project.generate_really_simply_text_file_report
end
end
Но я не знаю, как генерировать поток в памяти, таким образом, никакой файл не создается в файловой системе.
Другая опция генерировала бы файл со случайным именем в приложении для направляющих tmp каталог и отправлять его оттуда, но затем файл будет сохранен там, который является чем-то, что я предпочел бы не происходить.
Править: Если я не ошибаюсь, send_file блокирует прошение, пока файл не отправляется, таким образом, это могло работать...
Какие-либо другие советы или мнения?
Заранее спасибо
Если это простая проблема, как вы ее описываете, подойдет такое простое решение. Только не забудьте параметр : filename
, иначе файл будет называться «файл_проекта».
def project_file
project = Project.find(params[:id])
send_data project.generate_really_simply_text_file_report, :filename => "#{project.name}.txt"
end
Изменить:
ваш проект # generate_really_simply_text_file_report
должен возвращать двоичные данные, путь к файлу или необработанную строку.
def download
content = "chunky bacon\r\nis awesome"
send_data content, :filename => "bacon.txt"
end