you can still use an href to the controller that returns finally your file, I don't see the problem (unless you want to fire something else, you can still animate the button in the middle). When you click on a link that returns an attachment you won't see the page change. If you want to use an ajax function strictly, there are some tricks involved, because ajax is supposed to send/return only text responses. Let us know what you need.
On Thursday, October 18, 2012 2:39:09 PM UTC+2, weheh wrote: > > Hi Niphlod - I modified my response.stream call to include the filename > argument. When I call the controller, the file does get downloaded. > However, when ajax calls the controller, the file isn't downloaded. > > @Leonel, a simple link, like A('download tar file', _href='%?attachment' % > path_to_download_file) won't work because the file to be downloaded doesn't > exist at the time the link is created. It needs to be generated on the fly. > > > On Thursday, October 18, 2012 4:46:33 PM UTC+8, Niphlod wrote: >> >> the first thing is: when you navigate to mycontroller/mydownload (no >> ajax) can you get the file downloaded ? >> second thing missing from your code: if you want the content downloaded >> as an attachment, set the content-disposition header to attachment; >> filename=afilename.tar (or if you're using recent web2py version >> response.stream(file, attachment=True, filename=afilename.tar)) >> >> On Thursday, October 18, 2012 8:09:09 AM UTC+2, weheh wrote: >>> >>> Is it possible to do a response.stream in the middle of an ajax callback? >>> >>> I want to give users a button, which if pressed, will tar up all their >>> files and initiate a download. Something like this: >>> >>> TAG.BUTTON(..., _onclick="ajax("%s", [], ':eval');" % >>> URL(c='mycontroller', f='mydownload')) >>> >>> Then later, in mycontroller.py, >>> >>> def mydownload(): >>> ... create tarfile ... >>> return response.stream(tarfile, attachment=True) >>> >>> I tried it, but (perhaps obviously to some) it doesn't work. So, how to >>> get the mydownload() action to cause the browser to download the tarfile? >>> >> --