So instead of using:

return response.stream(file_path, chunk_size=10**6, filename='output.pdf')

I simply use:

 pdf_data = open(file_path,"rb").read()
 return pdf_data

and it works. No idea why, because I thought "stream" method was supposed 
to be used to stream files, but it does not work.

W dniu środa, 20 sierpnia 2014 15:43:14 UTC+2 użytkownik Kuba Kozłowicz 
napisał:
>
> from applications.ChartGenerator.modules import generator
> from gluon import HTTP, contenttype
>
> #URL
> def generate():
>     if request.env.request_method == 'POST':
>         import gluon.contrib.simplejson
>         try:
>             data = gluon.contrib.simplejson.loads(request.body.read())
>             file_path = generator.go(data)
>             response.headers['Content-Disposition'] = 'attachment; 
> filename=' + 'output.pdf'
>             response.headers['Content-Type'] = contenttype.CONTENT_TYPE[
> '.pdf']
>             return response.stream(file_path, chunk_size=10**6, filename=
> 'output.pdf')
>
>
> client code:
>
> import requests
> import json
>
> payload = """
> ...
> <chart_params_in_json>
> ...
> """
> data_dict = json.loads(payload)
>
> url = 'http://127.0.0.1:8000/ChartGenerator/charts/generate'
> resp = requests.post(url, data=json.dumps(data_dict), stream=True)
> filename = 'x.pdf'
>
> with open(filename, 'wb') as f:
>     for chunk in resp.iter_content(chunk_size=10**6): 
>         if chunk: # filter out keep-alive new chunks
>             f.write(chunk)
>             f.flush()
>
> print resp.headers
>
> {
>     'content-length': '15',
>     'set-cookie': 
> 'session_id_chartgenerator=127.0.0.1-e21b530d-b5e0-4a6f-aa41-63e394124d5c;Path=/'
> ,
>     'server': 'Rocket1.2.6Python/2.7.5',
>     'connection': 'keep-alive',
>     'date': 'Wed,
>     20Aug201413: 22: 47GMT',
>     'content-type': 'text/html;charset=UTF-8'
> }
>
> The downloaded file via
> request.post
>
> has only 1KB, but the original file has 145KB. Content-Type on server side 
> does not get set to 'application/pdf', even though I explicitly set it with 
> following line:
> response.headers['Content-Type'] = contenttype.CONTENT_TYPE['.pdf']
>
> I guess this is the problem, because when I tried to open the downloaded 
> pdf file an error appeared saying that the file cannot be opened due to 
> invalid encoding method.
>
> With the original file everything is alright, because it is generated 
> properly after receiving chart params from the client.
>
> How can I solve this?
>
>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to