首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Whatsapp上传媒体文件错误

Whatsapp上传媒体文件错误
EN

Stack Overflow用户
提问于 2022-08-09 06:14:54
回答 2查看 548关注 0票数 2

目前,我正试图为Whatsapp制作一个薄包装器。我目前面临的问题之一是上传媒体文件不起作用。

从整个上传文件的文档来看,它似乎期望端点有一个multipart/form-data有效负载。

以下是我当前的实现

代码语言:javascript
复制
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中。

代码语言:javascript
复制
{
  "error": {
    "message": "(#100) The parameter messaging_product is required.",
    "type": "OAuthException",
    "code": 100,
    "fbtrace_id": "FBTRACE_ID"
  }
}

邮递员收藏用于上传媒体文件,因此我认为formData的file字段是问题所在。文件上的fs.createReadStream是否等同于邮递员处理文件上传的方式?

编辑:问题已经解决了,问题没有添加到由formData生成的标题中,谢谢下面的菲尔!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-10 06:12:00

喜欢这些文件..。他们说type是必需的参数,然后继续显示没有它的curl示例。

另外,file而不是.

存储在本地目录中的文件的路径

而是一个哑剧编码的二进制。

无论如何,type需要通过content-type元数据成为mime编码的一部分,然后您需要转发FormData

您还可能缺少Bearer身份验证令牌方案。

代码语言:javascript
复制
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());
}
票数 3
EN

Stack Overflow用户

发布于 2022-09-16 17:55:32

试试看,这对我有用:

代码语言:javascript
复制
    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);
    });
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73287244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档