You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Odoo 11服务器通过Java RPC或其他方式推送记录附件?

如何通过Java RPC向Odoo 11服务器推送附件至指定记录

没问题,我来帮你梳理清楚怎么用Java RPC给Odoo 11的指定记录上传附件。Odoo里所有的附件都存在ir.attachment这个模型里,所以我们的核心操作就是通过RPC调用这个模型的创建方法,把附件关联到目标记录上。下面是具体的步骤和代码示例:

1. 前期准备

  • 先给Java项目引入Odoo RPC的依赖,常用的是odoo-java-api这个库,如果用Maven的话,直接在pom.xml里加这段:
<dependency>
    <groupId>com.github.trabricks</groupId>
    <artifactId>odoo-java-api</artifactId>
    <version>1.0.1</version>
</dependency>
  • 提前准备好Odoo服务器的地址、数据库名、登录账号密码,还有要上传附件的目标记录的模型(比如客户是res.partner,销售订单是sale.order)以及对应的记录ID。

2. 核心实现步骤

2.1 建立Odoo连接并完成认证

首先得和Odoo服务器建立连接,登录成功后才能进行后续操作:

import com.github.odoo.OdooClient;
import com.github.odoo.models.OdooRecord;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;

public class OdooAttachmentUpload {
    public static void main(String[] args) {
        // 替换成你的Odoo配置信息
        String odooServerUrl = "http://你的Odoo服务器地址:8069";
        String dbName = "你的数据库名";
        String username = "你的登录账号";
        String password = "你的登录密码";

        try (OdooClient client = new OdooClient(odooServerUrl)) {
            // 登录认证
            int userId = client.authenticate(dbName, username, password);
            if (userId == -1) {
                System.err.println("登录失败!请检查账号密码或者服务器地址是否正确");
                return;
            }
            System.out.println("登录成功,当前用户ID:" + userId);

2.2 把本地文件转成Base64编码

Odoo的ir.attachment模型要求附件内容以Base64编码的字符串形式传入,所以我们需要先把本地文件转换成Base64:

// 读取本地文件并转换为Base64编码
            String localFilePath = "你要上传的文件路径,比如D:/docs/合同.pdf";
            byte[] fileBytes = Files.readAllBytes(Paths.get(localFilePath));
            String base64FileContent = Base64.getEncoder().encodeToString(fileBytes);

2.3 构造附件参数并调用创建方法

接下来构造ir.attachment需要的字段,然后调用RPC的create方法完成上传:

// 构造附件的参数
            Map<String, Object> attachmentParams = new HashMap<>();
            attachmentParams.put("name", "合同文件.pdf"); // 附件在Odoo里显示的名称
            attachmentParams.put("res_model", "res.partner"); // 目标记录的模型,比如客户是res.partner
            attachmentParams.put("res_id", 100); // 目标记录的ID,替换成你要关联的记录ID
            attachmentParams.put("datas", base64FileContent); // Base64编码的文件内容
            attachmentParams.put("type", "binary"); // 固定填binary,表示是二进制附件

            // 调用create方法创建附件
            OdooRecord createdAttachment = client.executeKw(
                    dbName, userId, password,
                    "ir.attachment", "create",
                    Arrays.asList(attachmentParams)
            );

            System.out.println("附件上传成功!生成的附件ID:" + createdAttachment.getId());
        } catch (Exception e) {
            System.err.println("上传过程出错:");
            e.printStackTrace();
        }
    }
}

3. 几个关键注意点

  • 关联字段必须准确:res_model和res_id是把附件绑定到目标记录的核心,一定要填对目标记录的模型名称和对应的ID,不然附件会变成无关联的孤立文件。
  • Base64编码不能错:如果编码过程出问题,上传后的文件会打不开,建议测试小文件先验证。
  • 权限要足够:登录的用户必须有创建ir.attachment的权限,同时也要能访问目标记录,不然会抛出权限不足的错误。
  • 大文件处理:Odoo默认有文件大小限制,如果要上传大文件,需要修改Odoo配置文件里的max_file_size参数。

要是你不想用第三方RPC库,也可以自己写HTTP请求调用Odoo的JSON-RPC接口,核心逻辑还是一样的:构造包含认证信息、模型、方法、参数的JSON请求体,POST到/jsonrpc端点,附件内容同样要转成Base64。

内容的提问来源于stack exchange,提问作者Rahul Thachilath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:12:12