gpt4 book ai didi

json - 使用python将json和文件发送到flask

转载 作者:行者123 更新时间:2023-12-03 15:57:39 25 4
gpt4 key购买 nike

我有这个问题,我试图在单个函数中向 flask API 发送/接收一些文件和 JSON。

在我的客户(发件人)上,我有:

#my json to be sent 
datas = {'var1' : 'var1','var2' : 'var2',}
#my file to be sent
local_file_to_send = 'user_picture.jpg'
url = "http://10.100.2.6:80/customerupdate"
headers = {'Content-type': 'multipart/form-data'}
files = {'document': open(local_file_to_send, 'rb')}
r = requests.post(url, files=files, data=datas, headers=headers)

在我的 Flask 服务器上,我有:
class OPERATIONS(Resource):
@app.route('/',methods=['GET'])
def hello_world():
return 'Hello World!'

@app.route('/customerupdate',methods=['GET','POST'])
def customerupdate():
event_data_2 = json.loads(request.get_data().decode('utf-8'))
print event_data_2

我收到这条错误消息,告诉我数据实际上既不是 json 格式也不是 utf8 格式。如果我打印“get_data”的内容而不尝试解码它会显示一些二进制字符..

我的客户端读取 json 并在本地写入文件的语法是什么?

最佳答案

我建议将 JSON 和文件作为多部分表单的一部分发送。在这种情况下,您可以从 request.files 读取它们。在服务器上。 (一个警告:我使用 Python 3、请求 2.18.4 和 Flask 0.12.2 测试了我的所有示例——您可能需要更改代码以匹配您的环境)。

来自 https://stackoverflow.com/a/35940980/2415176 (以及 http://docs.python-requests.org/en/latest/user/advanced/#post-multiple-multipart-encoded-files 处的 Flask 文档),您无需指定标题或任何内容。你可以让 requests为您处理:

import json
import requests

# Ton to be sent
datas = {'var1' : 'var1','var2' : 'var2',}

#my file to be sent
local_file_to_send = 'tmpfile.txt'
with open(local_file_to_send, 'w') as f:
f.write('I am a file\n')

url = "http://127.0.0.1:3000/customerupdate"

files = [
('document', (local_file_to_send, open(local_file_to_send, 'rb'), 'application/octet')),
('datas', ('datas', json.dumps(datas), 'application/json')),
]

r = requests.post(url, files=files)
print(str(r.content, 'utf-8'))

然后在服务器上你可以从 request.files 读取(参见 http://flask.pocoo.org/docs/0.12/api/#flask.Request.files 但请注意 request.files 过去的工作方式略有不同,参见 https://stackoverflow.com/a/11817318/2415176 ):
import json                                                     

from flask import Flask, request

app = Flask(__name__)

@app.route('/',methods=['GET'])
def hello_world():
return 'Hello World!'

@app.route('/customerupdate',methods=['GET','POST'])
def customerupdate():
posted_file = str(request.files['document'].read(), 'utf-8')
posted_data = json.load(request.files['datas'])
print(posted_file)
print(posted_data)
return '{}\n{}\n'.format(posted_file, posted_data)

关于json - 使用python将json和文件发送到flask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47679227/

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