rails对Donwload excel文件的http响应



我在github 中看到了这段代码

require "csv"
csv_str = CSV.generate do |csv|
csv << ["awesome", "csv"]
end
result = IO.popen("secure-spreadsheet --password secret", "r+") do |io|
io.write(csv_str)
io.close_write
io.read
end
File.open("output.xlsx", "w") { |f| f.write(result) }

这段代码在我的项目文件中存储了一个Excel文件(output.xlsx(。

我如何转换这个";存储文件场景";在";在浏览器中下载文件";?

在您的config/iinitializers/meme_types.rb中注册xlsx mime_type(默认情况下,它在Rails中不可用(:

Mime::Type.register "application/xlsx", :xlsx

假设您生成excel的代码有效,并且位于名为excel_file的控制器方法(私有(中(我认为最好提取到service/lib类中(:

def excel_file
csv_str = CSV.generate do |csv|
csv << ["awesome", "csv"]
end
IO.popen("secure-spreadsheet --password secret", "r+") do |io|
io.write(csv_str)
io.close_write
io.read
end
end

在你的控制器操作中,你应该能够做一些类似于的事情

def download_excel
respond_to do |format|
format.xlsx { send_data excel_file, type: 'application/xlsx; header=present', disposition: "attachment", filename: "output.xlsx"  }
end
end

(ActionController#send_data"将给定的二进制数据发送到浏览器"。通过该链接阅读更多信息(

如果你有一个视图,你可以有一个下载链接

<%= link_to "Download", your_download_path(format: "xlsx") %>

用户应该能够通过链接下载excel文件

相关内容

  • 没有找到相关文章

最新更新