gpt4 book ai didi

python - 返回包含 png 文件和 markdown 的 multipart/formdata 作为 flask 响应

转载 作者:行者123 更新时间:2023-12-05 02:15:43 26 4
gpt4 key购买 nike

您好,我正在尝试从获取请求的数据中返回多部分。但是我无法返回 MultipartEncoder object作为回应。我已经尝试过解决方案 Can I serve a multipart http response in Flask?

下面的代码只返回“toPersonEmail”字段。如何在 Flask 中返回 m 作为响应?

@app.route("/multipart", methods=['GET'])
def send_multipart():
m = MultipartEncoder(fields={ 'markdown': "> Block quotes are written like so in markdown.",
'toPersonEmail':'d@d.com',
'files': ("pnggrad16rgb.png", open("pnggrad16rgb.png", 'rb'),
'image.png')})


return Response(m.fields, mimetype=m.content_type)

最佳答案

Flask 没有针对多部分 MIME 响应的具体规定; multipart/form 是一种 mimetype,通常只用在服务器的 POST 请求中,而不用在来自 HTTP 服务器的响应中。

如果您必须返回有效的多部分 MIME 数据,请将正文呈现为字节并在响应对象上设置正确的 header ; `(

m = MultipartEncoder(fields={ 'markdown': "> Block quotes are written like so in markdown.",
'toPersonEmail':'d@d.com',
'files': ("pnggrad16rgb.png", open("pnggrad16rgb.png", 'rb'),
'image.png')})

return (m.to_string(), {'Content-Type': m.content_type})

如果您想流式传输响应,您必须提供您自己的生成器函数,该函数以 block 的形式从多部分编码器中读取:

def chunked_reader(f, chunksize=2 ** 20):  # 1Mb chunks
while True:
chunk = f.read(chunksize)
if not chunk:
return
yield chunk

并在 streaming response data 时使用它来包装您的 MultipartEncoder() 实例:

# include the Content-Length header, even though we are streaming
return Response(
chunked_reader(m), content_type=m.content_type,
headers={'Content-Length': m.len})

MultipartEncoder() 对象支持 .read() 方法,就像文件一样。

关于python - 返回包含 png 文件和 markdown 的 multipart/formdata 作为 flask 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51380417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com