返回JSON和文件

时间:2015-05-30 15:46:05

标签: python flask

如何返回JSON响应和文件响应:

现在我这样做:

runNumber = "A0001"
response = None
try:
    response = make_response("Line One\r\nLine Two\r\n")
    response.headers["Content-Disposition"] = "attachment; filename=" + runNumber + ".txt"
except MyCustomException as e:
    response = jsonify(error=e.value, runnumber=runNumber)
except:
    raise
return(response)

但这只允许我返回JSON或文件。在某些情况下,我想要返回两者。

[编辑:] 我想要返回JSON和文件的情况是当用户在使用该文件之前应检查的文件内容有警告时。

如果无法做到这一点,我会将警告添加到文件内容中。

1 个答案:

答案 0 :(得分:1)

你不能只回复两个回复。你只能回归那个。

这意味着如果真的需要同时返回JSON和文件,您需要提出一个方案,让您在一个响应中返回两个并让客户端再次将文件和JSON部分分开。

没有标准。无论您想出什么,都需要仔细记录,以便客户明确处理。

您可以使用自定义标头来存储JSON数据,例如:

response = make_response("Line One\r\nLine Two\r\n")
response.headers["Content-Disposition"] = "attachment; filename=" + runNumber + ".txt"
response.headers['X-Extra-Info-JSON'] = json.dumps(some_object)

或者您可以将文件内容放在JSON数据中。 JSON不是二进制数据的最佳格式,您可能希望首先将二进制数据编码为Base64:

filedata = "Line One\r\nLine Two\r\n".encode('base64')
return jsonify(name=runNumber + '.txt', data=filedata)

或者您可以使用与POST multipart/form-data正文相同的方式创建多部分MIME文档。

您选择的内容取决于您的用例(使用您的API的客户端类型)和数据大小(JSON响应中的文件数据的兆字节数不是很可行)。