> Hard to say.
>
> I don't know if this helps but here's how appadmin does it for a csv file:
>
> def csv():
> import gluon.contenttype
> response.headers['Content-Type'] = \
> gluon.contenttype.contenttype('.csv')
> db = get_database(request)
> query = get_query(request)
> if not query:
> return None
> response.headers['Content-disposition'] = 'attachment;
> filename=%s_%s.csv'\
> % tuple(request.vars.query.split('.')[:2])
> return str(db(query).select())
>
Try to set Content-Length header to avoid nginx losing data
--
Roberto De Ioris
http://unbit.it