0

我正在尝试开发一个烧瓶服务器,它根据来自 HTTP Post 请求的 json 数据和文件生成一个演示对象。我可以使用相同的代码在本地生成文件,但是当我尝试将其作为 http 响应发送时失败。

这是将其作为 http 响应发送的代码片段 -

prs_file_io = BytesIO()
prs.save(prs_file_io)
resp = Response()
resp.status_code = 200
resp.set_data(prs_file_io.getvalue())
return resp

这是发送请求并尝试保存文件的python脚本 -

r = requests.post('http://localhost:8181/create-ppt',
                  #data=open('tile_resp.json', 'rb'),
                  files={'1': open('./0NtNFb0F9ch15fDrgYoECEpctPkjvayD.png', 'rb'),
                         'tile_data': open('tile_resp.json', 'rb')})
print(r.content)

最后,我将请求脚本的输出通过管道传输到 pptx 文件。

但这不知道我在这里犯了什么错误?

4

3 回答 3

1

以下情况如何:

response = make_response(prs_file_io.get_value())
response.headers['Content-Type'] = "application/vnd.openxmlformats-officedocument.presentationml.presentation"
response.headers['Content-Description'] = 'attachment; filename=example.pptx'
return response

make_response是来自 Flask 的方法,请参见make_response()

如果响应应该是 pptx 文件,那会起作用吗?

于 2016-12-13T11:22:47.150 回答
0

这是一个老问题,但以上都没有对我有用,所以我想分享我的解决方案:

prs = Presentation(input)
file = io.BytesIO()
prs.save(file)

response = HttpResponse(content_type='application/vnd.ms-powerpoint')
response['Content-Disposition'] = 'attachment; filename="sample.pptx"'
response.write(file.getvalue())
file.close()
return response
于 2021-06-14T18:12:38.360 回答
0

我这样做使用

send_file

通过做:

from flask import send_file
from app import application
from pptx import Presentation
import os

prs=Presentation()
filename = os.path.join(application.root_path, 'test.pptx')
prs.save(filename)
return send_file(filename_or_fp=filename)

在我的代码中,应用程序是在 app 文件夹中的 python 文件中定义的,因此该行:

from app import application

如果你想走这条路,你必须为你的应用程序改变这个。

于 2018-06-11T18:52:09.267 回答