Как отправить динамично сгенерированный файл в приложении для направляющих

Я пытаюсь служить динамично сгенерированным файлам в приложении для направляющих, поэтому когда пользователь нажимает на определенную ссылку, файл сгенерирован и отправлен клиенту, использующему 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 блокирует прошение, пока файл не отправляется, таким образом, это могло работать...

Какие-либо другие советы или мнения?

Заранее спасибо

6
задан Simone Carletti 4 February 2010 в 12:47
поделиться

1 ответ

Если это простая проблема, как вы ее описываете, подойдет такое простое решение. Только не забудьте параметр : 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
19
ответ дан 8 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: