Yu *_* Ng 4 javascript form-data node.js whatsapp axios
目前我正在尝试围绕 Whatsapp Cloud API 制作一个薄包装器。我目前面临的问题之一是上传媒体文件无法正常工作。
查看上传文件的文档,似乎它需要将multipart/form-data有效负载发送到端点。
这是我当前的实现
import FormData from 'form-data';
import fs from 'fs';
import axios from 'axios';
const formData = new FormData();
formData.append('file', fs.createReadStream('path/to/my/file.jpg'));
formData.append('messaging_product', 'whatsapp');
formData.append('type', 'image/jpeg');
await axios.post('https://graph.facebook.com/v14.0/PHONE_NO_ID/media', formData, {
headers: { 'Authorization': ACCESS_TOKEN }
});
Run Code Online (Sandbox Code Playgroud)
看看它返回的错误,似乎我在某种程度上丢失了该messaging_product字段,即使我已将其正确添加到 formData 中。
{
"error": {
"message": "(#100) The parameter messaging_product is required.",
"type": "OAuthException",
"code": 100,
"fbtrace_id": "FBTRACE_ID"
}
}
Run Code Online (Sandbox Code Playgroud)
Postman集合用于上传媒体文件,所以我认为fileformData 的字段是问题所在。是fs.createReadStream在文件上相当于Postman处理文件上传的方式
编辑:问题已经解决,问题不是添加到 formData 生成的标题中,感谢下面的菲尔!
喜欢这个文档...他们说type这是一个必需的参数,然后继续展示一个curl没有它的示例。
还有,file是不是...
存储在本地目录中的文件的路径
而是一个 mime 编码的二进制文件。
在任何情况下,都type需要通过content-type元数据成为 mime 编码的一部分,然后您需要转发由 生成的内容类型标头FormData。
您还可能缺少Bearer身份验证令牌方案。
const PHONE_NO_ID = "something";
const ACCESS_TOKEN = "something";
const formData = new FormData();
formData.append("file", fs.createReadStream("path/to/my/file.jpg"), {
contentType: "image/jpeg",
});
formData.append("messaging_product", "whatsapp");
try {
const {
data: { id: mediaId },
} = await axios.post(
`https://graph.facebook.com/v14.0/${PHONE_NO_ID}/media`,
formData,
{
headers: {
Authorization: `Bearer ${ACCESS_TOKEN}`, // "Bearer" prefix
...formData.getHeaders(), // merge in FormData headers
},
}
);
console.log("media ID", mediaId);
} catch (err) {
console.error("upload", err.toJSON());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2380 次 |
| 最近记录: |