我正在尝试开发一个烧瓶服务器,它根据json数据和HTTP Post请求中的文件生成一个表示对象。 我能够使用相同的代码在本地生成文件,但是当我尝试发送它时,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文件。
但是这不知道我在这里犯了什么错误?
答案 0 :(得分:0)
以下内容如何:
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文件,那会有用吗?
答案 1 :(得分: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
如果你想走这条路,你必须为你的申请改变这个。
答案 2 :(得分: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