如何转换文件以通过 JSON 发送(到 Odoo 控制器)
How to convert a file to send it throught JSON (To an Odoo controller)
我有一个控制器可以为特定模型创建新记录。
此模型包含 fields.Binary
。
控制器的外观如下:
@http.route('/mymodel/create', type='json', method='POST', auth='user')
def create_record(self, **kwargs):
"""
@params:
'field1': string
'field2': int
'binaryField': binary
"""
values = {'my_model_field_1': kwargs.get('field1'),
'my_model_field_2': kwargs.get('field2'),
'my_model_binary_field': kwargs.get('binaryField')}
request.env['my_model'].create(values)
我的问题是我应该如何从连接到服务器的远程应用程序发送我的文件?
我可能不得不将其作为字符串发送,因为它是以 json 格式发送的。我必须如何修改我的控制器才能正确接收它?
如果能提供一个将文件转换为可以通过 Json 发送的字符串的代码示例,我将不胜感激。我还必须从任何语言转换它,因为我正在构建一个 API,二进制字段将识别的标准是什么?
正如我在评论中所说,您可能需要以二进制形式读取文件内容,使用 base64 对其进行编码,然后对编码字节进行解码以将其放入 JSON.
Python3 完成此操作的代码段:
import base64
import json
data = {}
# read raw file bytes
with open('filename','rb') as myfile:
file_bytes = myfile.read()
# encode, decode and put it in the JSON
data['file'] = base64.encodebytes(file_bytes).decode('ascii')
# optionally serialize the JSON
serialized_json = json.dumps(data)
我有一个控制器可以为特定模型创建新记录。
此模型包含 fields.Binary
。
控制器的外观如下:
@http.route('/mymodel/create', type='json', method='POST', auth='user')
def create_record(self, **kwargs):
"""
@params:
'field1': string
'field2': int
'binaryField': binary
"""
values = {'my_model_field_1': kwargs.get('field1'),
'my_model_field_2': kwargs.get('field2'),
'my_model_binary_field': kwargs.get('binaryField')}
request.env['my_model'].create(values)
我的问题是我应该如何从连接到服务器的远程应用程序发送我的文件?
我可能不得不将其作为字符串发送,因为它是以 json 格式发送的。我必须如何修改我的控制器才能正确接收它?
如果能提供一个将文件转换为可以通过 Json 发送的字符串的代码示例,我将不胜感激。我还必须从任何语言转换它,因为我正在构建一个 API,二进制字段将识别的标准是什么?
正如我在评论中所说,您可能需要以二进制形式读取文件内容,使用 base64 对其进行编码,然后对编码字节进行解码以将其放入 JSON.
Python3 完成此操作的代码段:
import base64
import json
data = {}
# read raw file bytes
with open('filename','rb') as myfile:
file_bytes = myfile.read()
# encode, decode and put it in the JSON
data['file'] = base64.encodebytes(file_bytes).decode('ascii')
# optionally serialize the JSON
serialized_json = json.dumps(data)