You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Graph API在Facebook单条帖子中上传多张照片

解决Facebook Graph API单帖上传多张图片的问题

核心思路

直接批量调用/photos端点并携带message会生成独立帖子,正确流程分两步:

  1. 批量上传图片时设置published=false,仅将图片存入页面相册(不自动发帖),获取每张图片的ID
  2. 调用/feed端点,把所有图片ID作为attached_media参数传入,生成包含所有图片的单条帖子

修改后的代码实现

1. Facebook JavaScript SDK版本

function postMultiplePhotosToPage(pageAccessToken, pageId, payload) {
  // 第一步:批量上传图片(不发布)
  const uploadBatch = payload.mediaUrls.map((url) => ({
    method: 'POST',
    relative_url: `${pageId}/photos`,
    body: `url=${encodeURIComponent(url)}&published=false&access_token=${pageAccessToken}`
  }));

  FB.api('/', 'POST', { batch: uploadBatch }, (uploadResponses) => {
    // 提取上传成功的图片ID
    const photoIds = uploadResponses
      .filter(res => res.code === 200)
      .map(res => JSON.parse(res.body).id);

    if (photoIds.length === 0) {
      console.error('图片上传失败');
      return;
    }

    // 第二步:创建包含所有图片的单帖
    const attachedMedia = photoIds.map(id => ({ media_fbid: id }));
    FB.api(`/${pageId}/feed`, 'POST', {
      message: payload.post,
      attached_media: JSON.stringify(attachedMedia),
      access_token: pageAccessToken
    }, (feedResponse) => {
      if (feedResponse.error) {
        console.error('发帖失败:', feedResponse.error);
      } else {
        console.log('单帖多图发布成功,帖子ID:', feedResponse.id);
      }
    });
  });
}

2. Axios(TypeScript)版本

async function postMultiplePhotosToPage(pageAccessToken: string, pageId: string, payload: { mediaUrls: string[], post: string }) {
  try {
    // 第一步:批量上传图片(不发布)
    const uploadBatch = payload.mediaUrls.map(url => ({
      method: 'POST',
      relative_url: `${pageId}/photos`,
      body: `url=${encodeURIComponent(url)}&published=false`
    }));

    const uploadResponse = await axios.post('https://graph.facebook.com/', null, {
      params: {
        batch: JSON.stringify(uploadBatch),
        access_token: pageAccessToken
      }
    });

    // 提取图片ID
    const photoIds = uploadResponse.data
      .filter((res: any) => res.code === 200)
      .map((res: any) => JSON.parse(res.body).id);

    if (photoIds.length === 0) {
      throw new Error('没有图片上传成功');
    }

    // 第二步:创建单帖
    const attachedMedia = photoIds.map(id => ({ media_fbid: id }));
    const postResponse = await axios.post(`https://graph.facebook.com/${pageId}/feed`, null, {
      params: {
        message: payload.post,
        attached_media: JSON.stringify(attachedMedia),
        access_token: pageAccessToken
      }
    });

    console.log('单帖多图发布成功,帖子ID:', postResponse.data.id);
    return postResponse.data;
  } catch (error) {
    console.error('发布失败:', error);
    throw error;
  }
}

关键注意事项

  • published=false:必须设置该参数,否则每张图片会自动生成独立帖子
  • attached_media:需传入JSON字符串格式的数组,每个元素包含media_fbid字段(对应图片ID)
  • 权限验证:确保access_token拥有pages_manage_posts、pages_show_list等必要权限,且图片URL为公开可访问地址

内容的提问来源于stack exchange,提问作者Usama Mushtaq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 07:13:22