通过 Facebook API 将照片上传到相册的问题 - PHP

问题描述:

我无法通过 facebook API 将照片上传到相册.这是我的代码.

I have problems to upload a photo to an album by the facebook API. this is my code.

$facebook->setFileUploadSupport(true);

    //Create an album
    $album_details = array(
            'message'=> 'Message',
            'name'=> 'Album Name'
    );
    $create_album = $facebook->api('/me/albums?access_token='.$access_token, 'post', $album_details);

    //Get album ID of the album you've just created
    $album_id = $create_album['id'];

    echo $album_id." - ";

    //Upload a photo to album of ID...
    $photo_details = array();

    $img = "app.jpg";

    $photo_details['source'] = '@' . $img;
    $photo_details['message'] = 'Wow.. cool image!';

    $upload_photo = $facebook->api('/'.$album_id.'/photos?access_token='.$access_token, 'post', $photo_details);

当我用表格上传图片时,它起作用了!但此代码不会将图像上传到相册中.我也用 CURL 尝试过,但没有任何东西......我不知道问题出在哪里......

When i upload the image with a form, it works! but this code does not upload the image into the album. I have tried also with CURL but there is nothing... i don't know where the problem is...

在 Graph API Explorer 上测试了一些东西后,这是一个可用的 PHP 版本:

After testing few things on Graph API Explorer, Here's a working PHP Version:

<?php
# Path to facebook's PHP SDK.
require_once("facebook.php");

# Facebook application config.
$config = array(
    'appId'      => 'YOUR_APP_ID',
    'secret'     => 'YOUR_APP_SECRET',
    'fileUpload' => true # Optional and can be set later as well (Using setFileUploadSupport() method).
);

# Create a new facebook object.
$facebook = new Facebook($config);

# Current user ID.
$user_id = $facebook->getUser();

# Check to see if we have user ID.
if($user_id) {

  # If we have a user ID, it probably means we have a logged in user.
  # If not, we'll get an exception, which we handle below.
  try {

    # Get the current user access token:
    $access_token = $facebook->getAccessToken();

    # Create an album:
    $album_details = array(
            'access_token' => $access_token,
            'name'         => 'Album Name',
            'message'      => 'Your album message goes here',
    );

    $create_album = $facebook->api('/me/albums', 'POST', $album_details);

    # Get album ID of the album you've just created:
    $album_id = $create_album['id'];

    # Output album ID:
    echo 'Album ID: ' . $album_id;

    # Upload photo to the album we've created above:
    $image_absolute_url = 'http://domain.com/image.jpg';

    $photo_details = array();
    $photo_details['access_token']  = $access_token;
    $photo_details['url']           = $image_absolute_url;                        # Use this to upload image using an Absolute URL.
    $photo_details['message']       = 'Your picture message/caption goes here';

    //$image_relative_url             = 'my_image.jpg';
    //$photo_details['source']        = '@' . realpath($image_relative_url);      # Use this to upload image from using a Relative URL. (Currently commented out).

    $upload_photo = $facebook->api('/' . $album_id . '/photos', 'POST', $photo_details);

    # Output photo ID:
    echo '<br>Photo ID: ' . $upload_photo['id'];

  } catch(FacebookApiException $e) {
    // If the user is logged out, you can have a 
    // user ID even though the access token is invalid.
    // In this case, we'll get an exception, so we'll
    // just ask the user to login again here.
    $login_url = $facebook->getLoginUrl( array('scope' => 'publish_stream, user_photos')); 
    echo 'Please <a href="' . $login_url . '">login.</a>';
    error_log($e->getType());
    error_log($e->getMessage());
  }   
} else {

  # No user, print a link for the user to login and give the required permissions to perform tasks.
  $params = array(
      'scope' => 'publish_stream, user_photos', # These permissions are required in order to upload image to user's profile.
  );

  $login_url = $facebook->getLoginUrl($params);
  echo 'Please <a href="' . $login_url . '">login.</a>';

    }
?>

我添加了注释,以便您通过阅读代码了解它的作用.

I have added comments so you could understand what it does by reading the code.

这适用于绝对 url 和相对 url,我已经注释掉了使用相对 url 上传图片的代码,正如您在评论中提到的,您无法读取图片的真实路径.

This works with both absolute url and relative url, I have commented out code for uploading image using relative url as you have mentioned in your comments you can't read real path of the image.

注意:用户必须向您的 Facebook 应用程序授予扩展权限才能将图像上传到他们的个人资料,这些权限是 publish_streamuser_photos代码>.

Note: The user has to give extended permissions to your facebook application to upload images to their profile, Those permissions are publish_stream and user_photos.

让我知道这是否对您有帮助以及它是否有效:)

Let me know if this helped you and if it works :)