Je construis une application pour gérer les abonnements et générer des listes de diffusion.Envoyer un fichier zip avec la méthode de rattachement de Sinatra ne fonctionne pas
Je suis en train de créer une fonctionnalité dans mon application pour exporter toutes les listes de diffusion sous chaque abonnement en tant que plusieurs csv. Cela génère un fichier zip avec tous les différents csv à l'intérieur. Ensuite, j'utilise la méthode de rattachement dans Sinatra pour envoyer le fichier à l'utilisateur.
Cependant, chaque fois que je fais cela, l'utilisateur obtient un fichier zip qui est inférieur à 1 Ko sans aucune des données - mais quand je regarde les fichiers sur le serveur, le fichier zip est là et il a toutes les données dedans.
Une idée de pourquoi la pièce jointe que l'utilisateur télécharge n'a aucune donnée?
Code I utilisé pour créer et envoyer le fichier zip pour les utilisateurs:
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
Merci à l'avance!