`我在尝试使用 Axios 将图像上传到 WhatsApp Cloud API 时遇到问题。尽管将扩展名为 .png 的图像的表单数据的内容类型设置为“image/png”,但我仍然收到来自 WhatsApp 的错误消息,指示“invalid_request”。错误消息特别提到参数“file”必须是具有指定 MIME 类型之一的文件,但它正在接收类型为“application/octet-stream”的文件。
错误信息: 从 WhatsApp 收到的错误消息是:“OAuth 'Facebook Platform' 'invalid_request' '(#100) 参数文件必须是以下类型之一的文件:audio/aac、audio/mp4、audio/mpeg、audio/amr 、音频/ogg、音频/opus、应用程序/vnd.ms-powerpoint、应用程序/msword、应用程序/vnd.openxmlformats-officedocument.wordprocessingml.document、应用程序/vnd.openxmlformats-officedocument.presentationml.presentation、应用程序/vnd.openxmlformats -officedocument.spreadsheetml.sheet、application/pdf、text/plain、application/vnd.ms-excel、image/jpeg、image/png、image/webp、video/mp4、video/3gpp。收到类型为“application/”的文件八位字节流'"
这是node.js 文件的代码
(async () => {
const formData = new FormData();
formData.append("messaging_product", "whatsapp");
formData.append("type", "image/png");
const stream = await streamToBlob(
fs.createReadStream(
"/filepath"
)
);
formData.append("file", stream);
console.log("formData", formData);
let config = {
method: "post",
maxBodyLength: Infinity,
url: `https://graph.facebook.com/v18.0/${phoneNumberId}/media`,
headers: {
Authorization:
`Bearer ${token}`,
"Content-Type": "multipart/form-data;image/png",
},
data: formData,
};
axios
.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
})();
尽管将扩展名为 .png 的图像的表单数据的内容类型设置为“image/png”
您添加了一个额外的 参数,其名称为
type
,值为 image/png
- 这与其他任何内容的实际 Content-Type
没有任何关系。
并且您设置了
Content-Type: multipart/form-data;image/png
,这根本没有意义。 request 的 Content-Type 必须是 multipart/form-data
。 image/png
只是此多部分请求中的 parts 之一的 Content-Type。
https://www.npmjs.com/package/stream-to-blob 显示
streamToBlob
采用可选的第二个参数 mimeType
- 这就是您需要为 BLOB 设置 Content-Type 的地方您在这里创建的。
const stream = await streamToBlob(
fs.createReadStream(
"/filepath"
),
"image/png"
);