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

在n8n中将Ultramsg图片转Base64并上传至Odoo的问题求助

问题排查与解决方案:n8n图片转Base64上传Odoo失败

核心问题分析

你的代码存在两个关键错误:

  1. Base64字符串提取错误:输出代码中直接将binaryData(整个binary对象)赋值给x_studio_pointage_photo,但n8n的binary对象包含data(Base64字符串)、mimeType等属性,Odoo需要的是纯Base64编码内容(通常需带data URI前缀)。
  2. 缺少Odoo要求的格式前缀:Odoo的图片字段一般要求传入完整的data URI格式(data:[MIME类型];base64,[Base64字符串]),而非单纯的Base64字符串。

修正后的代码

// 获取前一个节点的binary数据
const binaryEntry = $input.first().binary?.data;

if (!binaryEntry) {
  throw new Error("未找到binary数据");
}

// 提取Base64字符串并拼接Odoo要求的data URI前缀
const base64Image = `data:${binaryEntry.mimeType};base64,${binaryEntry.data}`;

// 获取当前日期
const date = new Date().toISOString().slice(0, 10);

// 返回处理后的数据
return {
  json: {
    x_studio_pointage_photo: base64Image,  // 带格式前缀的Base64图片
    x_studio_work_date: date,
    x_studio_notes: $json.x_studio_notes || "",
  },
  binary: {
    data: binaryEntry  // 按需保留原始binary数据
  }
};

关键修正说明

  • 正确提取Base64内容:通过binaryEntry.data获取实际的Base64编码字符串,而非整个binary对象。
  • 添加data URI前缀:结合binary对象中的mimeType字段,拼接成Odoo可识别的完整格式,确保图片字段能正确解析。
  • 保留原始binary数据:如果后续节点需要使用原始文件,可继续保留binary输出。

验证步骤

  1. 运行修正后的代码,查看输出JSON中的x_studio_pointage_photo字段,确认格式为data:image/jpeg;base64,xxxxxx。
  2. 测试上传至Odoo,检查图片是否能正常显示。
  3. 若仍失败,检查Odoo对应字段的类型是否为二进制/图片类型,以及API权限是否正确。

内容的提问来源于stack exchange,提问作者Sarah Mabrouk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 03:05:10