如何返回 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 和文件的情况是,出现有关文件内容的警告,用户在使用该文件之前应检查该警告。
如果这是不可能的,我会将警告添加到文件的内容中。
您不能只返回两个响应。您只能返回一个。
这意味着,如果您确实需要返回 JSON 和文件,您需要想出一个方案,让您可以在一个响应中返回这两个内容,并让客户端再次分离出文件和JSON部分。
对此没有标准。无论您提出什么,都需要仔细记录下来,以便您的客户明确处理。
您可以使用自定义 header 来存储 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)
或者您可以创建一个多部分 MIME 文档,就像 POST multipart/form-data
主体的工作方式一样。
您的选择取决于您的用例(使用您的 API 的客户端类型)和数据大小(JSON 响应中的兆字节文件数据不太可行)。
我是一名优秀的程序员,十分优秀!