返回包含png文件的multipart/formdata并将其标记为Flask响应

2024-10-03 17:18:47 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我正在尝试从get请求返回数据的多部分。但是,我无法将MultiPartEncoder对象作为响应返回。我已经尝试过在 Can I serve a multipart http response in Flask?

下面的代码只返回“toPersonEmail”字段。如何在烧瓶中返回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)

Tags: 数据对象inhttpfieldsgetpngresponse
1条回答
网友
1楼 · 发布于 2024-10-03 17:18:47

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

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

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})

如果您想流化响应,则必须提供自己的生成器函数,该函数分块从多部分编码器读取:

^{pr2}$

并在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()方法。在

相关问题 更多 >