【问题标题】:How to send a dynamically generated file in a rails app如何在 Rails 应用程序中发送动态生成的文件
【发布时间】:2010-02-04 11:36:05
【问题描述】:

我正在尝试在 Rails 应用程序中提供动态生成的文件,因此当用户单击特定链接时,会生成文件并使用 send_data 将文件发送到客户端。

该文件不打算重复使用:是一个短文本文件,重新生成应该非常便宜,因为它不会被下载那么多;但如果有必要或方便,我可以将其存储在数据库中,因此只生成一次。

首先,我想在内存中生成文件,然后在控制器中发送。我正在尝试归档这样的内容:

def DownloadsController < ApplicationController
  def project_file
    project = Project.find(params[:id])
    send_data project.generate_really_simply_text_file_report
  end
end

但我不知道如何在内存中生成流,所以文件系统中没有创建文件。

另一种选择是在 rails app tmp 目录中生成具有随机名称的文件并从那里发送,但随后该文件将保留在那里,这是我不希望发生的事情。

编辑:如果我没记错的话,send_file 会阻止请愿,直到文件被发送,所以它可以工作......

还有其他建议或意见吗?

提前致谢

【问题讨论】:

    标签: ruby-on-rails file dynamic-data


    【解决方案1】:

    如果它是您描述的一个简单问题,那么一个简单的解决方案就可以了。只是不要忘记:filename 选项,否则文件将被命名为“project_file”。

      def project_file
        project = Project.find(params[:id])
        send_data project.generate_really_simply_text_file_report, :filename => "#{project.name}.txt"
      end
    

    编辑:

    您的project#generate_really_simply_text_file_report 应该返回二进制数据、文件路径或原始字符串。

      def download
        content = "chunky bacon\r\nis awesome"
        send_data content,  :filename => "bacon.txt" 
      end
    

    【讨论】:

    • 我的问题是我不知道如何生成要在内存中发送的二进制数据。
    • 谢谢!我最终使用带有 render_to_string 方法的 erb 模板来生成字符串数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2011-09-03
    • 2023-03-22
    • 2013-02-04
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    相关资源
    最近更新 更多