У меня есть список таких временных файлов:
urls = [#<Tempfile:/tmp/down20190222-7434-18yoxw4.jpg>, #<Tempfile:/tmp/down20190222-7434-1r8c4y2.jpg>, #<Tempfile:/tmp/down20190222-7434-qpyiy1.JPG>, #<Tempfile:/tmp/down20190222-7434-q8xyup.mp4>]
Теперь я хочу заархивировать эти файлы для пользователей, чтобы загрузить его:
t = Tempfile.new('tmp-zip')
Zip::OutputStream.open(t.path) do |zos|
urls.each do |file|
zos.print IO.read(file)
end
end
send_file t.path, :type => "application/zip", :filename => "myfile.zip"
t.close
но я получил ошибку closed stream excluded from capture: DSN not set
в строке: zos.print IO.read(file)
.Что я был не прав в этом случае?Это мой полный код:
if posts.present?
urls = []
posts.each do |post|
urls << post.filestack_image_url if post.filestack_image_url.present?
urls << post.photo_attributes('original')['url'] if post.photo.present?
urls << post.filestack_video_url if post.filestack_video_url.present?
urls << post.video_attributes('remote')['url'] if post.video.present?
end
urls = urls.collect {|url| download_url(url) }.compact
t = Tempfile.new('tmp-zip')
Zip::OutputStream.open(t.path) do |zos|
urls.each do |file|
zos.print IO.read(file.path.to_s.split("/")[-1])
end
end
send_file t.path, :type => "application/zip", :filename => "Awesome.zip"
t.close
end