【问题标题】:Ruby on Rails API - Export CSVRuby on Rails API - 导出 CSV
【发布时间】:2021-10-08 19:10:37
【问题描述】:

这可能很久以前就被问过了,但我在任何地方都找不到好的答案。

我的申请目前的情况是:

  • Rails API(无视图)
  • TypeScript JS

现在,我的任务是构建 CSV 功能...

问题是,

  • 如何在 rails api 中做到这一点?
  • 我的前端应该如何处理这个问题?

这是我不工作的端点:

   def download_csv

    headers = ['column one', 'column two', 'column three']

    csv_data = CSV.generate(headers: true) do |csv|
      csv << headers
      csv << ["A", "B", "C"]
    end
    csv_data.strip

    send_file(
      csv_data,
      disposition: "attachment; csv-.csv",
      
    )
  end

【问题讨论】:

标签: ruby-on-rails api csv export-to-csv rails-api


【解决方案1】:

您想使用send_data 而不是send_file

def download_csv
  # Move the CSV generation out of the the controller 
  # for example into a service object where it can be tested in isolation
  headers = ['column one', 'column two', 'column three']
  csv_data = CSV.generate(headers: true) do |csv|
    csv << headers
    csv << ["A", "B", "C"]
  end
  send_data(
    csv_data,
    filename: 'myfile.csv', # suggests a filename for the browser to use.
    type: :csv,  # specifies a "text/csv" HTTP content type
  )
end

要使用send_file,您实际上需要将 CSV 写入服务器文件系统上的文件 - 如果 CSV 生成成本很高,这可能是有意义的。

【讨论】:

  • 好的,它返回 200,但我没有在浏览器中看到正在下载的文件...这是我的服务器日志,[2021-10-09T03:55:15.130589 #79461] INFO -- : method=GET path=/api/admin/users/download_csv format=html controller=Api::Admin::UsersController action=download_csv status=200 duration=11.21 view=0.08 db=6.76
  • 编写一个涵盖此操作的集成测试,然后创建关于处理上传的前端部分的第二个问题。如上所述,当一个问题实际上是多个问题合并为一个时,它是有问题的,因为它几乎不可能回答它们并且范围不断扩大。
  • 可以理解的最大值。感谢您的回答...将写一篇关于前端处理的新帖子
猜你喜欢
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 2012-02-14
  • 2016-03-24
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多