Ruby 使用Sinatra'发送zip文件;s的附件方法不起作用
我正在构建一个用于管理订阅和生成邮件列表的应用程序 我正在我的应用程序中构建一个功能,将每个订阅下的所有邮件列表导出为多个csv。这将生成一个包含所有csv的zip文件。然后我使用Sinatra中的附件方法将文件发送给用户 但是,每当我这样做时,用户都会得到一个小于1KB的zip文件,其中没有任何数据——但是当我查看服务器上的文件时,zip文件就在那里,它包含了所有数据 你知道为什么用户下载的附件没有任何数据吗 我用于创建zip文件并将其发送给用户的代码:Ruby 使用Sinatra'发送zip文件;s的附件方法不起作用,ruby,zip,sinatra,Ruby,Zip,Sinatra,我正在构建一个用于管理订阅和生成邮件列表的应用程序 我正在我的应用程序中构建一个功能,将每个订阅下的所有邮件列表导出为多个csv。这将生成一个包含所有csv的zip文件。然后我使用Sinatra中的附件方法将文件发送给用户 但是,每当我这样做时,用户都会得到一个小于1KB的zip文件,其中没有任何数据——但是当我查看服务器上的文件时,zip文件就在那里,它包含了所有数据 你知道为什么用户下载的附件没有任何数据吗 我用于创建zip文件并将其发送给用户的代码: require 'zip' get
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
需要“zip”
得到“/全部”去做
zip\u name='所有邮件列表。zip'
File.delete(zip_name)(如果文件存在)(zip_name)#删除以前的版本(如果存在)
#获取alrady创建的所有csv文件的列表并将其删除
Dir.glob(“./exports/*.csv”)do |文件路径|
File.delete(文件路径)如果File.exists?(文件路径)
结束
subscriptions=Subscription.all#将所有订阅获取到一个数组中
#迭代所有订阅并导出到csv
订阅。每个订阅|
export=ExportCsv.new
邮件列表=导出。导出邮件列表(订阅)
#创建csv
打开(“./exports/#{subscription.name}_mailing_list.csv”,'w+')do|文件|
文件因此,我发现Sinatra有一种不同的方法,称为send\u file
,在这种情况下比attachment
方法工作得更好
使用send_file
而不是attachment
效果很好。