以下是代码:
$file= 'bbbb.jpg';
$data = array(
basename($file) => "@".realpath($file),
"caption" => "Uploaded using graph api",
"aid" => '13595',
"access_token" => $accessToken,
'method' => 'photos.upload'
);
$sds =$facebook->api($data);
这是错误
未捕获的CurlException:26:创建formpost数据失败
怎么办?
答案 0 :(得分:12)
以下是使用Graph API上传照片的各种方法。这些示例假设您已实例化$ facebook对象并为当前用户提供有效会话。
此示例将照片上传到当前用户的默认应用程序相册。如果相册尚不存在,则会创建。
$args = array('message' => 'Photo Caption');
$args['image'] = '@' . realpath($FILE_PATH);
$data = $facebook->api('/me/photos', 'post', $args);
print_r($data);
此示例会将照片上传到特定相册。
$args = array('message' => 'Photo Caption');
$args['image'] = '@' . realpath($FILE_PATH);
$data = $facebook->api('/'. $ALBUM_ID . '/photos', 'post', $args);
print_r($data);
此示例会将照片上传到需要访问令牌的特定相册。
$args = array('message' => 'Photo Caption');
$args['image'] = '@' . realpath($FILE_PATH);
$data = $facebook->api('/'. $ALBUM_ID . '/photos?access_token='. $ACCESS_TOKEN, 'post', $args);
print_r($data);
答案 1 :(得分:3)
你的$ data数组应该有“message”而不是“caption”,
另外,删除“援助”,“方法”和“access_token”
你的$ data必须有文件数据和“message”,就是它。
$sds =$facebook->api('/me/13595/photos', 'POST', $data);
而不是13595只使用带有专辑辅助的变量
另外,如果需要,最好将access_token附加到api uri,如下所示:
$sds =$facebook->api('/me/13595/photos?access_token='.$access_token, 'POST', $data);
另外,如果php sdk不适合你,我已经成功使用了cURL,如果你的php安装支持它。在这种情况下,请参阅Upload Photo To Album with Facebook's Graph API
处的cURL示例答案 2 :(得分:2)
最新版本的Facebook PHP SDK无法使用上述示例,而无需对代码进行以下更新。
class Facebook {
...
*Line #539*
protected function makeRequest($url, $params, $ch=null) {
if (!$ch) {
$ch = curl_init();
}
if( isset($params['doMultiPart']) ) {
$doMultiPart= true;
unset($params['doMultiPart']);
} else {
$doMultiPart= false;
}
$opts = self::$CURL_OPTS;
$opts[CURLOPT_POSTFIELDS] = $doMultiPart ? $params : http_build_query($params, null, '&');
...
基本上问题是PHP SDK使用“curl_setopt_array”,如果你传递一个url编码的字符串作为选项值,它将传递数据为 application / x-www-form-urlencoded < / em> 当你真正想要的是 multipart / form-data ;要做到这一点,我们只需切换到传递选项数组,如果我们在params数组中有一个 doMultiPart 参数。
这是一个快速 hack 我把它放在一起工作,可能需要检查代码以确保它不会破坏你正在做的其他事情。否则就享受吧。