目前,我正试图为Whatsapp制作一个薄包装器。我目前面临的问题之一是上传媒体文件不起作用。
从整个上传文件的文档来看,它似乎期望端点有一个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 }
});看看它返回的错误,似乎我在某种程度上遗漏了messaging_product字段,尽管我已经将它正确地添加到了formData中。
{
"error": {
"message": "(#100) The parameter messaging_product is required.",
"type": "OAuthException",
"code": 100,
"fbtrace_id": "FBTRACE_ID"
}
}邮递员收藏用于上传媒体文件,因此我认为formData的file字段是问题所在。文件上的fs.createReadStream是否等同于邮递员处理文件上传的方式?
编辑:问题已经解决了,问题没有添加到由formData生成的标题中,谢谢下面的菲尔!
发布于 2022-08-10 06:12:00
喜欢这些文件..。他们说type是必需的参数,然后继续显示没有它的curl示例。
另外,file是而不是.
存储在本地目录中的文件的路径
而是一个哑剧编码的二进制。
无论如何,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());
}发布于 2022-09-16 17:55:32
试试看,这对我有用:
var axios = require('axios');
var FormData = require('form-data');
var fs = require('fs');
var data = new FormData();
data.append('messaging_product', 'whatsapp');
data.append('file', fs.createReadStream('./images/fly.jpg'));
data.append('type', 'image/jpeg');
var config = {
method: 'post',
url: 'https://graph.facebook.com/v13.0/phone_number_id/media',
headers: {
'Authorization': 'Bearer access_token',
...data.getHeaders()
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});https://stackoverflow.com/questions/73287244
复制相似问题