在n8n中将Ultramsg图片转Base64并上传至Odoo的问题求助
问题排查与解决方案:n8n图片转Base64上传Odoo失败
核心问题分析
你的代码存在两个关键错误:
- Base64字符串提取错误:输出代码中直接将
binaryData(整个binary对象)赋值给x_studio_pointage_photo,但n8n的binary对象包含data(Base64字符串)、mimeType等属性,Odoo需要的是纯Base64编码内容(通常需带data URI前缀)。 - 缺少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输出。
验证步骤
- 运行修正后的代码,查看输出JSON中的
x_studio_pointage_photo字段,确认格式为data:image/jpeg;base64,xxxxxx。 - 测试上传至Odoo,检查图片是否能正常显示。
- 若仍失败,检查Odoo对应字段的类型是否为二进制/图片类型,以及API权限是否正确。
内容的提问来源于stack exchange,提问作者Sarah Mabrouk
相关产品推荐
相关产品推荐

