我想在应用程序的默认相册中为用户上传一张照片到 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);
但是,当我尝试此操作时,出现异常“(#324)需要上传文件”。我有一个有效的会话,并且我有 publish_stream 和 user_photos 权限。我可以使用 API 检索数据。图像文件绝对有效,因为它可以加载file_get_contents(realpath("image.png"))
.
我已经使用 curl 尝试过这个解决方案,效果很好: Upload Photo To Album with Facebook's 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);
与 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);
为什么PHP版本不起作用?看起来 http_build_query() 函数正在干扰加载图像。我对 curl 了解不多,无法理解这里发生了什么。