| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- import os # 导入os模块,用于操作文件和目录
- import base64 # 导入base64模块,用于编码和解码数据
- from xmlrpc.client import ServerProxy # 导入ServerProxy类,用于创建XML-RPC客户端代理
- # 定义Odoo服务器的URL,这里使用的是实际的URL
- url = 'https://dis.dt-ok.cn:8888'
- # 如果需要在本地开发环境中测试,可以取消注释下面的url行
- # url = 'http://127.0.0.1:8069'
- # Odoo数据库的名称、用户名和密码
- db = 'dis'
- username = 'jack'
- password = 'aaaAAA111!!!'
- # 创建一个指向Odoo服务器通用接口的代理
- common = ServerProxy(f'{url}/xmlrpc/2/common')
- # 使用数据库名、用户名、密码和空的附加参数进行认证,获取用户ID
- uid = common.authenticate(db, username, password, {})
- # 定义存放图片的本地文件夹路径
- base_dir = 'picture_dir'
- # 创建一个指向Odoo服务器对象接口的代理
- models = ServerProxy(f'{url}/xmlrpc/2/object')
- # 在Odoo中搜索所有的png图片,获取它们的ID列表
- image_ids = models.execute_kw(db, uid, password, 'qy_io.resource', 'search', [[['type', '=', 'png']]])
- # 创建一个集合,用于存储系统中已存在的图片名称
- existing_image_names = set()
- # 读取搜索到的图片记录,将它们的名称添加到集合中
- for image in models.execute_kw(db, uid, password, 'qy_io.resource', 'read', [image_ids, ['name']]):
- existing_image_names.add(image['name'])
- # 获取本地文件夹中的所有文件列表,并构造完整的文件路径
- files = [os.path.join(base_dir, file) for file in os.listdir(base_dir)]
- # 遍历本地文件夹中的每个文件
- for filename in os.listdir(base_dir):
- # 如果文件不是png格式的图片,则跳过
- if not filename.endswith('.png'):
- continue
- # 打开图片文件进行读取
- fb = open(os.path.join(base_dir, filename), 'rb')
- # 获取图片的原始名称(不包含扩展名)
- name = filename[:-4]
- # 检查Odoo中是否已存在同名的图片
- if name in existing_image_names:
- # 如果存在,根据业务逻辑决定是替换图片还是更新其他信息
- # 这里选择替换图片
- # 搜索Odoo中同名的图片,获取它们的ID列表
- image_ids = models.execute_kw(db, uid, password, 'qy_io.resource', 'search', [[['name', '=', name]]])
- # 如果找到了图片,则取第一个ID进行更新操作
- if image_ids:
- image_id = image_ids[0]
- # 读取图片内容并进行base64编码,然后更新图片数据
- models.execute_kw(db, uid, password, 'qy_io.resource', 'write', [image_id, {
- 'data': base64.b64encode(fb.read()).decode()
- }])
- print(f'Updated image: {name}') # 打印更新图片的信息
- else:
- # 如果Odoo中不存在同名的图片,则创建新的图片记录
- ext = filename[-3:] # 获取图片文件的扩展名
- # 创建新的图片记录,包括名称、类型和base64编码后的数据
- id = models.execute_kw(db, uid, password, 'qy_io.resource', 'create', [{
- 'name': name,
- 'type': ext,
- 'data': base64.b64encode(fb.read()).decode()
- }])
- print(f'Created new image: {name}') # 打印创建新图片的信息
|