2012-02-02 3 views
0

Je fais un test pour essayer de télécharger des photos dans le profil d'un utilisateur. J'ai pu l'obtenir pour télécharger une photo dans l'album d'application par défaut en l'affichant sur/me/photos; Toutefois, lorsque j'essaie de publier une autre photo sur ce même album avec la même méthode, elle renvoie une exception OAuthException. La même chose se produit lorsque j'essaie de télécharger vers un album existant distinct.Téléchargement d'une photo vers un album existant

Si je supprime l'album de l'application, je peux alors le télécharger à nouveau et cela fonctionne, mais dès que j'essaie d'en télécharger un autre, il échoue.

Je l'ai essayé à la fois avec le SDK .NET et avec le SDK PHP standard. Les deux donnent le même résultat.

Code SDK .NET

Voici l'action que je poste ma forme à:

public ActionResult UploadToDefaultAlbum(PhotoUploadModel model) 
    { 
     model = model ?? new PhotoUploadModel(); 

     if (model.IsPostback) 
     { 
      if (model.PhotoUpload != null) 
      { 
       var fb = new FacebookWebClient(model.AccessToken); 
       dynamic parameters = new ExpandoObject(); 

       parameters.title = model.Title; 
       parameters.description = model.Title + " description"; 
       parameters.source = 
        new FacebookMediaObject {ContentType = model.PhotoUpload.ContentType, FileName = model.PhotoUpload.FileName}. 
         SetValue(GetFileBytes(model.PhotoUpload.InputStream)); 

       var result = fb.Post("/me/photos", parameters); 
       ViewBag.Message = result; 
      } 
      else 
      { 
       ViewBag.Message = "PhotoUpload is null"; 
      } 
     } 

     model.IsPostback = true; 
     return View("Upload",model); 
    } 

Et mon formulaire HTML:

@using (Html.BeginForm("UploadToDefaultAlbum", "Photos", FormMethod.Post, new { enctype = "multipart/form-data"})) { 
<fieldset> 
    <legend>Upload to default App album</legend> 

    <div class="editor-label"> 
     @Html.LabelFor(m => m.Title) 
    </div> 
    <div class="editor-field"> 
     @Html.InputFor(System.Web.Mvc.Html5.InputType.Text, x => x.Title) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(m => m.PhotoUpload) 
    </div> 
    <div class="editor-field"> 
     @Html.InputFor(System.Web.Mvc.Html5.InputType.File, x => x.PhotoUpload) 
    </div> 

    @Html.HiddenFor(x => x.IsPostback) 
    @Html.HiddenFor(x => x.AccessToken) 
    <button type="submit">Submit</button> 
</fieldset> 

}

Lorsqu'un utilisateur charge la page de formulaire, je vérifie qu'ils ont les user_photos et p Autorisations ublish_stream (utilisant l'attribut CanvasAuthorize).

Y at-il quelque chose qui me manque pour me permettre de télécharger sur un album existant?

code PHP SDK

J'ai copié ce code directement à partir https://developers.facebook.com/blog/post/498/ et juste définir les variables en haut pour mon application. ?

<?php 

    $app_id = "xxx"; 
    $app_secret = "xxx"; 
    $post_login_url = "https://localhost/facebookresearch/photoupload.php"; 
    $album_name = 'PHP Test Album'; 
    $album_description = 'YOUR_ALBUM_DESCRIPTION'; 

    $code = $_REQUEST["code"]; 

    //Obtain the access_token with publish_stream permission 
    if(empty($code)) 
    { 
     $dialog_url= "http://www.facebook.com/dialog/oauth?" 
     . "client_id=" . $app_id 
     . "&redirect_uri=" . urlencode($post_login_url) 
     . "&scope=publish_stream"; 
     echo("<script>top.location.href='" . $dialog_url . 
     "'</script>"); 
    } 
    else { 
    $token_url= "https://graph.facebook.com/oauth/" 
    . "access_token?" 
    . "client_id=" . $app_id 
    . "&redirect_uri=" . urlencode($post_login_url) 
    . "&client_secret=" . $app_secret 
    . "&code=" . $code; 
    $response = file_get_contents($token_url); 
    $params = null; 
    parse_str($response, $params); 
    $access_token = $params['access_token']; 

    // Create a new album 
    $graph_url = "https://graph.facebook.com/me/albums?" 
    . "access_token=". $access_token; 

    $postdata = http_build_query(
    array(
     'name' => $album_name, 
     'message' => $album_description 
     ) 
    ); 
    $opts = array('http' => 
    array(
     'method'=> 'POST', 
     'header'=> 
     'Content-type: application/x-www-form-urlencoded', 
     'content' => $postdata 
    ) 
    ); 
    $context = stream_context_create($opts); 
    $result = json_decode(file_get_contents($graph_url, false, 
     $context)); 

    // Get the new album ID 
    $album_id = $result->id; 

    //Show photo upload form and post to the Graph URL 
    $graph_url = "https://graph.facebook.com/". $album_id 
     . "/photos?access_token=" . $access_token; 
    echo '<html><body>'; 
    echo '<form enctype="multipart/form-data" action="' 
    .$graph_url. ' "method="POST">'; 
    echo 'Adding photo to album: ' . $album_name .'<br/><br/>'; 
    echo 'Please choose a photo: '; 
    echo '<input name="source" type="file"><br/><br/>'; 
    echo 'Say something about this photo: '; 
    echo '<input name="message" type="text" 
     value=""><br/><br/>'; 
    echo '<input type="submit" value="Upload" /><br/>'; 
    echo '</form>'; 
    echo '</body></html>'; 
    } 

>

La réponse est:

{ 
    "error": { 
     "message": "An unexpected error has occurred. Please retry your request later.", 
     "type": "OAuthException" 
    } 
} 

Il crée l'album, mais ne peut pas télécharger la photo à elle. Donc, il semble qu'il y ait un paramètre que j'ai mal dans mon application ou un bug dans FB. Je suppose que le premier, mais ne peut pas comprendre ce que ce pourrait être.

Est-ce que cela ferait une différence que l'application soit en mode bac à sable et que j'utilise un utilisateur de test?

Répondre

3

Il semble que ce soit seulement un problème lorsque vous utilisez une application en mode sandbox. J'ai basculé mon application hors du mode sandbox et tout a fonctionné comme prévu.

-1

Ce n'est ni un bogue dans fb ni un bogue dans php ou csharp sdk. C'est le comportement attendu.

Vous ne pouvez pas télécharger de photos dans des albums que cette application ne possède pas.

+0

Pourquoi me donnerait-il la même erreur en essayant de télécharger une deuxième photo dans/me/photos dans l'album photo de l'application? – jwynveen

Questions connexes