2010-07-09 6 views
5

응용 프로그램의 기본 앨범에있는 사용자의 페이스 북에 사진을 업로드하고 싶습니다. 여기에 게시 아래에 설명되어 있습니다 : http://developers.facebook.com/docs/reference/api/photoFacebook Graph API로 사진을 업로드 할 때 예외가 발생했습니다.

방법은 여기에 대답했습니다 : How can I upload photos to album using 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"))으로로드 될 수 있기 때문에 확실히 유효합니다.

나는 완벽하게 작동하는 컬을 사용하여,이 솔루션을 시도했다 :

: (동일한 $의 인수 및 $ URL을 사용하여)이 보이는 페이스 북의 PHP SDK 컬과 비교 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); 

$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() 함수가 이미지 로딩을 방해하고있는 것 같습니다. 나는 여기서 무슨 일이 벌어지고 있는지 이해하기 위해 컬에 대해서 충분히 모른다.

답변

12

내가 같은 물마루로 갔다 니 기쁘다. fileUpload 매개 변수를 true로 설정해야합니다! 이것에 대한 너무 많은

$facebook = new Facebook(array(
      'appId' => $facebookapi_id, 
      'secret' => $facebookapi_secret, 
      'fileUpload' => true, 
      'cookie' => true 
     )); 
+0

덕분에 - 당신이 사용하는 경우, 사용자 생성 된 메시지가 의도하지 않은 또는 악성 파일 업로드를 만들 수 있다는 것을 인식 – Lobe

+0

검색의 긴 시간 이후에 저를 저장했다. – peterjwest

+0

감사! 사진 업로드에 관한 문서에서 이것이 현저하다고 생각할 것입니다. . . WTH !!! – TuK

1

Facebook은 http_build_query()을 사용하여 실수로 또는 악의적으로 파일을 업로드하는 데 사용되는 @로 시작하는 필드를 중지하기 위해 의도적으로 POST 필드를 GET 문자열로 변형했습니다. 이 작업을 수행 할 경우 조치를 취해야하지만

$opts[CURLOPT_POSTFIELDS] = $params; 

:

$opts[CURLOPT_POSTFIELDS] = http_build_query($params, null, '&'); 

가되다 : Here's the GitHub issue.

이에 대한 빠른 수정은 SDK에 SRC/facebook.php에서 http_build_query()을 제거하는 것입니다 @로 시작하는 사용자 생성 메시지를 필터링합니다. 예를 들어 각 메시지 앞에 공백을 추가 할 수 있습니다.