WhatsApp Cloud API 上传问题:由于 MIME 类型不正确而收到“invalid_request”错误

问题描述 投票:0回答:1

`我在尝试使用 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/”的文件八位字节流'"

Here is the screen shot of pipdream post request

这是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);
        });
    })();
javascript node.js file-upload media whatsapp-cloud-api
1个回答
0
投票

尽管将扩展名为 .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"
      );
© www.soinside.com 2019 - 2024. All rights reserved.