Ich baue eine App zum Verwalten von Abonnements und Erstellen von Mailinglisten.Senden einer Zip-Datei mit Sinatras Anhangsmethode funktioniert nicht
Ich baue eine Funktion in meiner App, um alle Mailinglisten unter jedem Abonnement als mehrere CSVs zu exportieren. Dies erzeugt eine Zip-Datei mit all den verschiedenen CSVs darin. Dann benutze ich die Anhangsmethode in Sinatra, um die Datei an den Benutzer zu senden.
Immer wenn ich dies tue, erhält der Benutzer eine Zip-Datei, die kleiner als 1 KB ist ohne die Daten - aber wenn ich auf die Dateien auf dem Server schaue, ist die Zip-Datei da und es hat alle Daten drin.
Eine Idee, warum der Anhang, den der Benutzer herunterlädt, keine Daten hat?
-Code benutzen ich zu erstellen und die Zip-Datei an den Benutzer senden:
require 'zip'
get '/all' do
zip_name = 'all_mailing_lists.zip'
File.delete(zip_name) if File.exists?(zip_name) # Delete previous version if it exists
# Get a list of all csv files alrady created and delete them
Dir.glob("./exports/*.csv") do |filepath|
File.delete(filepath) if File.exists?(filepath)
end
subscriptions = Subscription.all # Get all subscriptions into an array
# Iterate through all subscriptions and export to csv
subscriptions.each do |subscription|
export = ExportCsv.new
mailing_list = export.export_mailing_list(subscription)
# Create the csv
File.open("./exports/#{subscription.name}_mailing_list.csv", 'w+') do |file|
file << mailing_list.to_s
end
end
# Zip all csv files
Zip::File.open(zip_name, Zip::File::CREATE) do |zipfile|
# Find all .csv files in the exports directory
Dir.glob("./exports/*.csv") do |filepath|
filename = filepath.split("/").pop
zipfile.add(filename, filepath)
end
end
# Download zip file
attachment("./all_mailing_lists.zip")
File.read("./all_mailing_lists.zip")
end
Vielen Dank im Voraus!