Making @headers['Refresh'] and send_file work together?


#1

I’ve got a Rails 1.1 app where people can click a link to download a
custom-generated file. The link to “Download Zip” goes to /
controller/get_zip. That action looks like this:

def get_zip
@cart = find_cart
ids = Array.new
@cart.songs.each do |song|
ids.push song.id
end

 args = ids.join(" ")
 zipfile = `#{RAILS_ROOT}/perl/buildzip.pl #{args}`
 begin
   size = File.stat(zipfile).size
   @cart.empty!
   filename = "out.zip"
   send_file(zipfile, :filename => filename, :type =>

“application/zip”, :str
eaming => false)
rescue
flash[:warning] = “Zip file no longer exists - did you already
download it
?”
redirect_to(:controller => “/online”)
end
end

I’d like to have the user get sent to a different page a few seconds
after the download starts. In a previous incarnation of this app,
I’d set the HTTP “Refresh” header before sending the binary data. In
fact, on a standard controller action that just renders RHTML, I can do:

  @headers["Refresh"] = '5, url=http://www.cnn.com/'

And it works as expected - 5 seconds after the action is rendered,
I’m redirected.

However, if I set that header before doing the send_file, nothing
happens. The file downloads properly - no problems there - but no
redirect. Looking through the source, it doesn’t seem like the
@headers are getting overwritten, just updated. But it’s certainly
not refreshing.

Any thoughts on how to make this work (or another way to accomplish
what I’m trying to do?