2010-07-09 28 views
5

के साथ फोटो अपलोड करते समय अपवाद मैं किसी एप्लिकेशन के लिए किसी एप्लिकेशन के लिए डिफ़ॉल्ट एल्बम में फेसबुक के लिए एक फोटो अपलोड करना चाहता हूं। इसे यहां प्रकाशित करने के तहत वर्णित किया गया है: http://developers.facebook.com/docs/reference/api/photoफेसबुक ग्राफ एपीआई

विधि का उत्तर यहां दिया गया है: 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) की आवश्यकता होती है अपलोड फ़ाइल" जब मैं इस प्रयास। मेरे पास एक वैध सत्र है और मेरे पास publ_stream और user_photos अनुमतियां हैं I मैं एपीआई का उपयोग कर डेटा पुनर्प्राप्त कर सकता हूं। छवि फ़ाइल निश्चित रूप से मान्य है क्योंकि इसे file_get_contents(realpath("image.png")) से लोड किया जा सकता है।

मैं इस समाधान की कोशिश की है, कर्ल का उपयोग कर, जो पूरी तरह से काम करता है: 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); 

फेसबुक के पीएचपी एसडीके कर्ल जो इस तरह दिखता है (एक ही $ args और $ यूआरएल का प्रयोग करके) के साथ तुलना में:

$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

मुझे बहुत खुशी है कि मैं एक ही समस्या को चला गया आपको फ़ाइल को अपलोड करने के लिए सर्वो को सेट करना होगा!

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

इस के लिए बहुत बहुत धन्यवाद - – Lobe

+0

खोज आप इस का उपयोग करते हैं, ध्यान रखें कि उपयोगकर्ता बनाया संदेशों अनजाने में या दुर्भावनापूर्ण फ़ाइल अपलोड बना सकते हो की एक लंबे समय के बाद मुझे बचा लिया। – peterjwest

+0

धन्यवाद! आपको लगता है कि यह फोटो अपलोड के लिए प्रलेखन में प्रमुख होगा। । । WTH !!! – TuK

1

फेसबुक ने जानबूझकर पोस्ट फ़ील्ड को http_build_query() का उपयोग करके जीईटी स्ट्रिंग में बदल दिया है ताकि फाइलों को अपलोड करने के लिए गलती से या दुर्भावनापूर्ण रूप से उपयोग किए जाने वाले फ़ील्ड को रोकने के लिए शुरू किया जा सके।

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

बन जाता है:

$opts[CURLOPT_POSTFIELDS] = $params; 
हालांकि

यदि आप ऐसा करते आप कार्रवाई करनी चाहिए Here's the GitHub issue.

इस लिए एक त्वरित सुधार SDK में src/facebook.php से http_build_query() दूर करने के लिए है उपयोगकर्ता द्वारा उत्पन्न संदेशों को फ़िल्टर करने के लिए जो @ से शुरू होते हैं। उदाहरण के लिए आप प्रत्येक संदेश के सामने एक जगह जोड़ सकते हैं।

1

यदि आप फोटो अपलोड करने के लिए ग्राफ़ एपीआई का उपयोग करते हैं तो उसे त्रुटि मिल जाएगी (# 200) उपयोगकर्ता ने TOS स्वीकार कर लिया होगा।

हालांकि यदि आप पुराने आराम एपीआई का उपयोग करते हैं, तो उदाहरण के लिए यदि आप उदाहरण का उपयोग करते हैं तो यूआरएल को https://api.facebook.com/method/photos.upload?access_token=xXXXXXXXXXXX पर बदलना।

संबंधित मुद्दे