使用axlsx进行流式下载

如何使用axlsx gem进行流式下载。我需要一种下载大文件的方法。时间将超过5分钟,我不想为此任务使用任何后台作业。我正在使用axlsx_rails宝石

我想出的方法

def download
  headers["Content-Type"] = "text/xlsx"  
  headers["Content-disposition"] = "attachment; filename=\"#{file_name}\""  
  headers['X-accel-Buffering'] = 'no' 
  headers["Cache-Control"] ||= "no-cache" 
  headers.delete("Content-Length")  
  @result =  FetchRecord.new(data)
  response.status = 200
  render xlsx: "file_download.xlsx.axlsx",filename: "#{file_name.camelize}.xlsx",locals: {result: @result}
end

上述解决方案不适用于我。有人可以告诉我我要去哪里哪里

lwj1314520 回答:使用axlsx进行流式下载

def download
  @result =  FetchRecord.new(data)
  @file = ActionView::Base.new(Rails.configuration.paths["app/views"]).render(handlers: [:axlsx],template: "model_name/download.xlsx",locals: {result: @result})
  respond_to do |format|
      format.xlsx { send_file @file,disposition: "attachment",filename: "file_download.xlsx"}
  end
end
,

您真的要生成由用户触发的文件吗?这可能会打开DOS攻击向量。您应该考虑准备这些文件的后台工作。

其余的应该在您的Web服务器中处理,而不是通过导轨或机架处理。

本文链接:https://www.f2er.com/2900395.html

大家都在问