如何通过Graph API在Facebook单条帖子中上传多张照片
解决Facebook Graph API单帖上传多张图片的问题
核心思路
直接批量调用/photos端点并携带message会生成独立帖子,正确流程分两步:
- 批量上传图片时设置
published=false,仅将图片存入页面相册(不自动发帖),获取每张图片的ID - 调用
/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
相关产品推荐
相关产品推荐

