rails 对下载 excel 文件的 http 响应
rails http response to Donwload excel file
我在 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/initializers/mime_types.rb 中注册 xlsx mime_type(它在 Rails 中默认不可用):
Mime::Type.register "application/xlsx", :xlsx
假设您执行 excel 生成的代码有效并且位于名为 excel_file
的控制器方法(私有)中(我认为最好提取到 service/lib class):
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)
阅读更多内容
有看的话可以下载link
<%= link_to "Download", your_download_path(format: "xlsx") %>
用户应该能够通过 link
下载 excel 文件
我在 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/initializers/mime_types.rb 中注册 xlsx mime_type(它在 Rails 中默认不可用):
Mime::Type.register "application/xlsx", :xlsx
假设您执行 excel 生成的代码有效并且位于名为 excel_file
的控制器方法(私有)中(我认为最好提取到 service/lib class):
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)
阅读更多内容有看的话可以下载link
<%= link_to "Download", your_download_path(format: "xlsx") %>
用户应该能够通过 link
下载 excel 文件