Node.js调用OpenAI DALL-E createImageEdit报400错误求助
Node.js OpenAI 图像编辑400错误解决思路
捕获详细错误信息
先把模糊的400错误转成具体提示,这是最直接的排查方式:
try { let response = await openai.createImageEdit( fs.createReadStream('assets/cute_cat.png'), fs.createReadStream('assets/mask.png'), 'a cat with a hat', 1, '512x512' ); } catch (error) { if (error.response) { console.error('具体错误:', error.response.data); } else { console.error('请求异常:', error.message); } }
OpenAI的响应体里会明确说明错误原因,比如掩码格式不符、文件损坏等。
调整文件传递方式
Node.js的文件流可能存在隐式问题,换成Buffer传递试试:
const fs = require('fs').promises; const imageBuffer = await fs.readFile('assets/cute_cat.png'); const maskBuffer = await fs.readFile('assets/mask.png'); let response = await openai.createImageEdit( imageBuffer, maskBuffer, 'a cat with a hat', 1, '512x512' );
也可以用绝对路径确保文件能被找到:
const path = require('path'); fs.createReadStream(path.resolve(__dirname, 'assets/cute_cat.png'))
检查掩码图片的格式要求
OpenAI要求掩码图片的透明区域才会被编辑,若你的mask.png是黑白填充图,需要转成带透明通道的格式,用sharp库处理:
const sharp = require('sharp'); // 将白色区域转为透明 await sharp('assets/mask.png') .flatten({ background: { r: 255, g: 255, b: 255 } }) .png() .toFile('assets/transparent_mask.png'); // 使用处理后的掩码发送请求 let response = await openai.createImageEdit( fs.createReadStream('assets/cute_cat.png'), fs.createReadStream('assets/transparent_mask.png'), 'a cat with a hat', 1, '512x512' );
升级OpenAI包并显式传参
Node.js包和Python版本可能存在参数处理差异,先升级到最新版:
npm update openai
再用显式命名参数的方式调用,避免位置参数的潜在问题:
let response = await openai.createImageEdit({ image: fs.createReadStream('assets/cute_cat.png'), mask: fs.createReadStream('assets/mask.png'), prompt: 'a cat with a hat', n: 1, size: '512x512' });
Axios手动请求的格式修正
如果用Axios发送请求,必须严格用form-data库构建表单:
const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); const form = new FormData(); form.append('image', fs.createReadStream('assets/cute_cat.png')); form.append('mask', fs.createReadStream('assets/mask.png')); form.append('prompt', 'a cat with a hat'); form.append('n', 1); form.append('size', '512x512'); const response = await axios.post('https://api.openai.com/v1/images/edits', form, { headers: { ...form.getHeaders(), 'Authorization': `Bearer ${process.env.OPENAI_API_KEY}` } });
不能手动拼接表单内容,否则会导致格式错误触发400。
内容的提问来源于stack exchange,提问作者shilleh
相关产品推荐
相关产品推荐

