Python调用Facebook Graph API传图遇(#324)错误的解决咨询
解决Facebook图片上传脚本的"Requires upload file"错误
原上传脚本
import facebook def add_static_image_to_audio(text, media): page_access_token = "token" graph = facebook.GraphAPI(page_access_token) facebook_page_id = "1234567890" photo = open('example.jpg', 'rb') graph.put_object(facebook_page_id, "photos", message=text, file=photo.read()) if __name__ == "__main__": import argparse parser = argparse.ArgumentParser(description="Simple Python script to add a static image to an audio to make a video") parser.add_argument("text", help="The text") parser.add_argument("media", help="image") args = parser.parse_args() add_static_image_to_audio(args.text, args.media)
运行错误信息
Traceback (most recent call last): File "C:\xampp\htdocs\laravel\storage\app\fb.py", line 19, in <module> add_static_image_to_audio(args.text, args.media) File "C:\xampp\htdocs\laravel\storage\app\fb.py", line 11, in add_static_image_to_audio graph.put_object(facebook_page_id, "photos", message=text, file=photo) File "C:\Users\Linus\AppData\Local\Programs\Python\Python310\lib\site-packages\facebook\__init__.py", line 189, in put_object return self.request( File "C:\Users\Linus\AppData\Local\Programs\Python\Python310\lib\site-packages\facebook\__init__.py", line 313, in request raise GraphAPIError(result) facebook.GraphAPIError: (#324) Requires upload file
问题分析与修复方案
错误提示(#324) Requires upload file说明文件未被正确传递到API请求中,脚本存在以下问题:
- 硬编码图片路径,未使用传入的
media参数; - 文件传递方式不符合Facebook SDK要求,且未正确管理文件资源。
修正后的脚本
import facebook def add_static_image_to_audio(text, media): page_access_token = "token" graph = facebook.GraphAPI(page_access_token) facebook_page_id = "1234567890" # 使用with语句安全打开文件,自动处理关闭逻辑 with open(media, 'rb') as photo: # 推荐使用put_photo方法专门上传照片,参数更直观 graph.put_photo(image=photo, message=text) # 也可以使用put_object方法,注意参数名是source而非file # graph.put_object(facebook_page_id, "photos", message=text, source=photo) if __name__ == "__main__": import argparse parser = argparse.ArgumentParser(description="向Facebook主页上传图片的Python脚本") parser.add_argument("text", help="图片附带的文字说明") parser.add_argument("media", help="要上传的图片路径") args = parser.parse_args() add_static_image_to_audio(args.text, args.media)
关键修复点
- 使用传入的图片路径:替换硬编码的
example.jpg为命令行传入的media参数,让脚本支持任意指定图片。 - 安全管理文件资源:用
with语句打开文件,确保操作完成后自动关闭,避免资源泄漏。 - 正确传递文件参数:
- 推荐使用
put_photo方法,通过image参数传递文件对象; - 若坚持使用
put_object,需将参数名从file改为source,这是Facebook Graph API的要求。
- 推荐使用
内容的提问来源于stack exchange,提问作者suessi1028
相关产品推荐
相关产品推荐

