使用Facebook Graph API上传照片时出现例外情况

pet*_*est 5 php facebook photo-upload facebook-graph-api

我想在应用程序的默认相册中为用户上传照片到Facebook.这是在这里发布的描述:http: //developers.facebook.com/docs/reference/api/photo

这里已经回答了这个方法:如何使用Facebook Graph API将照片上传到相册.我使用以下内容:

$args = array(
  'message' => 'Photo Caption', 
  'image' => '@'.realpath("image.png")
);
$data = $facebook->api('/me/photos', 'post', $args);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试这个时,我得到了异常"(#324)需要上传文件".我有一个有效的会话,我有publish_stream和user_photos权限.我可以使用API​​检索数据.图像文件绝对有效,因为它可以加载file_get_contents(realpath("image.png")).

我尝试过这个解决方案,使用curl,效果很好: 使用Facebook的Graph API将照片上传到相册

$args = array(
  'message' => 'Photo from application',
  'pic.png' => '@'.realpath('pic.png')
);
$tok = $session['access_token']
$url = 'http://graph.facebook.com/'.$album_id.'/photos?access_token='.$tok;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
$data = curl_exec($ch);
Run Code Online (Sandbox Code Playgroud)

与Facebook的PHP SDK curl相比,它看起来像这样(使用相同的$ args和$ url):

$ch = curl_init();
$opts = self::$CURL_OPTS;
$opts[CURLOPT_POSTFIELDS] = http_build_query($args, null, '&');
$opts[CURLOPT_URL] = $url;
curl_setopt_array($ch, $opts);
$data= curl_exec($ch);
Run Code Online (Sandbox Code Playgroud)

为什么PHP版本不起作用?看起来http_build_query()函数干扰加载图像.我不太了解curl以了解这里发生了什么.

小智 12

我很高兴我遇到了同样的问题你必须将fileUpload param设置为true!

$facebook = new Facebook(array(
            'appId'  => $facebookapi_id,
            'secret' => $facebookapi_secret,
            'fileUpload' => true,
            'cookie' => true
          ));  
Run Code Online (Sandbox Code Playgroud)