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

标签 json file post flask request

我有这个问题,我试图在单个函数中向 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/

相关文章:

javascript - 防止 jQuery post 请求多次触发

javascript - 在 Node.js 中使用 PUT 删除

java - 如何使用带有 lombok Builder 的 jackson 来反序列化 json 数组?

javascript - 重新格式化数组内的 JSON 对象以在 HTML 中显示它们

json 和类型转换

php - PHP SSH按模式分块读取文件

c++ - 处理错误的 ifstream

python导入名称文件并按字母顺序排序

Android 使用 HttpPost/HttpGet 发送照片

javascript - Ajax 成功函数未运行