rails risposta http al file excel di Donwload
ho visto questo codice in 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) }
questo codice memorizza un file Excel (output.xlsx) nel mio file di progetto.
come posso convertire questo "scenario del file di archivio" in "scaricare il file nel browser"?
Risposte
Nel tuo config / initializers / mime_types.rb registra xlsx mime_type (non è disponibile in Rails per impostazione predefinita):
Mime::Type.register "application/xlsx", :xlsx
Supponendo che il tuo codice che esegue la generazione di Excel funzioni e si trovi in un metodo controller (privato) denominato excel_file(penso sia meglio estrarre in una classe 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
Nell'azione del controller dovresti essere in grado di fare qualcosa del genere
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 "invia i dati binari forniti al browser". Leggi di più tramite quel link)
Se hai una vista, puoi avere un link per il download
<%= link_to "Download", your_download_path(format: "xlsx") %>
Gli utenti dovrebbero essere in grado di scaricare il file excel tramite il collegamento