28 votes

Téléchargez plusieurs photos sur Facebook à l'aide de la demande par lots

J'avais fait code suivant avec référence à la suite du lien à créer des lots de demande pour le téléchargement de plusieurs photos dans Facebook.

J'avais reçu une solution pour le téléchargement de plusieurs photos sur Facebook par le biais de ce Facebook graph API.

CODE:

    NSString *jsonRequest1 = @"{ \"method\": \"POST\", \"relative_url\": \"me/photos\" , \"body\": \"Hello 1\", \"attached_files\": \"file1\" }";
    NSString *jsonRequest2 = @"{ \"method\": \"POST\", \"relative_url\": \"me/photos\" , \"body\": \"Hello 2\", \"attached_files\": \"file2\" }";
    NSString *jsonRequestsArray = [NSString stringWithFormat:@"[ %@, %@ ]", jsonRequest1, jsonRequest2];
    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:jsonRequestsArray,@"batch",nil];
    [params setObject:UIImagePNGRepresentation(self.image1) forKey:@"file1"];
    [params setObject:UIImagePNGRepresentation(self.image2) forKey:@"file2"];
    [objFacebook requestWithGraphPath:@"me" andParams:params andHttpMethod:@"POST" andDelegate:self];

Maintenant, quand je suis en cours d'exécution de ce code que j'ai obtenu le résultat suivant.

Résultat Dictionnaire en - (void)request:(FBRequest *)request didLoad:(id)result

(
        {
        body = "{\"error\":0,\"error_description\":\"File file1 has not been attached\"}";
        code = 400;
        headers =         (
                        {
                name = "HTTP/1.1";
                value = "400 Bad Request";
            },
                        {
                name = "Content-Type";
                value = "text/javascript; charset=UTF-8";
            }
        );
    },
        {
        body = "{\"error\":0,\"error_description\":\"File file2 has not been attached\"}";
        code = 400;
        headers =         (
                        {
                name = "HTTP/1.1";
                value = "400 Bad Request";
            },
                        {
                name = "Content-Type";
                value = "text/javascript; charset=UTF-8";
            }
        );
    }
)

Je ne sais pas comment ce fichiers attachés.. quelqu'un Peut m'aider à comprendre ce problème.

Est-il tout changer dans mon code alors s'il vous plaît laissez-moi savoir.

Merci à l'avance...

1voto

ManOx Points 641

Je vous recommande d'utiliser les nouvelles API Facebook intégrées dans iOS 6 pour ce faire au lieu de l'API de Facebook: https://developer.apple.com/videos/wwdc/2012/?id=306, il y a une vidéo WWDC dorée pour toutes les tâches sociales. De plus, l'utilisation des nouvelles API dans iOS 6 est BEAUCOUP plus rapide que l'utilisation de Facebook.

0voto

Jason Points 1682

Vous ajoutez le binaire au dictionnaire de manière incorrecte. Jetez un œil à la méthode de téléchargement de fichiers dans l'exemple d'application de Facebook . Vous devriez pouvoir facilement adopter l'exemple de code de Facebook dans votre application.

 /** 
 * Upload a photo.
 */
-(IBAction)uploadPhoto:(id)sender 
{
  NSString *path = @"http://www.facebook.com/images/devsite/iphone_connect_btn.jpg";
  NSURL *url = [NSURL URLWithString:path];
  NSData *data = [NSData dataWithContentsOfURL:url];
  UIImage *img  = [[UIImage alloc] initWithData:data];

  NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                 img, @"picture",
                                 nil];
  [_facebook requestWithMethodName:@"photos.upload"
                         andParams:params
                     andHttpMethod:@"POST"
                       andDelegate:self];
  [img release];
}
 

0voto

Andy Obusek Points 4242

Pour votre NSDictionary de paramètres ,utilisez les NSData représentation, au lieu d'utiliser directement le UIImage objet.

En fonction du format de compression des images que vous téléchargez, vous aurez besoin d'utiliser une autre méthode pour convertir les UIImage à NSData. Voici deux techniques, l'une pour les PNG et un pour JPEG

//...cut...
[params setObject:UIImageJPEGRepresentation(self.jpegImage, 0.8) forKey:@"file1"];
[params setObject:UIImagePNGRepresentation(self.pngImage) forKey:@"file2"];
//...cut...

Ceci est un tutoriel de l'Facebook blog des Développeurs qui montre quelque chose de similaire (bien que c'est pour une vidéo, et pas le lot de l'API), et une différence significative à partir de votre code, c'est que le paramètre passé est dans NSData représentation, pas UIImage.

http://developers.facebook.com/blog/post/532/

0voto

Umangshu Chouhan Points 131

[params setObject: UIImagePNGRepresentation (self.image1) forKey: @ "file1"];

Ce ne devrait pas être les données, ce devrait être le chemin d'accès à ces images. Cela fonctionnera bien si vous fournissez un chemin au lieu de NSData.

0voto

J'ai obtenu la solution pour le téléchargement de fichiers multiples en utilisant FBgraph.

voici mon code.

 -(void) fbGraphCallback
{

FbGraphFile *graph_file = [[FbGraphFile alloc]initWithImage:imgView1.image];
FbGraphFile *graph_file1 = [[FbGraphFile alloc]initWithImage:imgView2.image];

NSString *jsonRequest1 = @"{ \"method\": \"POST\", \"relative_url\": \"me/photos\" , \"body\": \"First Image\", \"attached_files\": \"file1\" }";

NSString *jsonRequest2 = @"{ \"method\": \"POST\", \"relative_url\": \"me/photos\" , \"body\": \"Second Image\", \"attached_files\": \"file2\" }";

NSString *jsonRequestsArray = [NSString stringWithFormat:@"[ %@, %@ ]", jsonRequest1, jsonRequest2];

NSMutableDictionary *params = [NSMutableDictionary     dictionaryWithObjectsAndKeys:jsonRequestsArray,@"batch",nil];

[params setObject:graph_file forKey:@"file1"];
[params setObject:graph_file1 forKey:@"file2"];

[fbgraph doGraphPost:@"" withPostVars:params];

}
 

Merci mehul.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X