2012-04-24 6 views
26

Ich hatte folgenden Code mit Bezug auf folgende link getan, um Batch-Anfrage zum Hochladen mehrerer Fotos in Facebook zu erstellen.Laden Sie mehrere Fotos auf Facebook mit Batch-Anfrage

Ich hatte eine Lösung für das Hochladen mehrerer Fotos auf Facebook durch diesen Facebook graph API.

CODE bekommt:

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]; 

Nun, wenn ich diesen Code leite ich die folgende Ausgabe bekam.

Ergebnis Wörterbuch in- (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"; 
      } 
     ); 
    } 
) 

Ich weiß nicht, wie diese angehängten Dateien .. Kann mir jemand helfen, dieses Problem herauszufinden.

Gibt es Änderungen in meinem Code, dann lass es mich wissen.

Vielen Dank im Voraus ...

+0

Dies ist UIImage, die ich auf Facebook hochladen möchte. –

+0

Haben Sie versucht, auf diese Website zu gehen: http://developers.facebook.com/docs/reference/api/batch/ sieht sehr hilfreich aus Hoffe, das hilft – user1429586

+1

Ich hatte diesen Link vor der Frage hier zu sehen, liebe .. –

Antwort

0

Sie sind falsch die binäre zum Wörterbuch hinzufügen. Sehen Sie sich die Datei-Upload-Methode in Facebook's sample app an. Sie sollten den Beispielcode von Facebook problemlos in Ihre App übernehmen können.

/** 
* 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]; 
} 
+0

Du hast recht liebes aber Ist dein Code lädt zwei Bilder gleichzeitig auf Facebook ?? –

+0

@Jennis: Ich habe die Frage gelesen. Haben Sie versucht, den Code aus der Beispiel-App in Mehuls Code zu übernehmen? Sie können dem Wörterbuch mehrere Bildbinärdateien hinzufügen, wobei "file1" und "file2" die Schlüssel sind. – Jason

+0

Es funktioniert nicht Liebe ... –

0

Für Ihre NSDictionary von Parametern, verwenden Sie die NSData Darstellung, anstatt direkt die UIImage-Objekt.

Abhängig vom Komprimierungsformat der Bilder, die Sie hochladen möchten, müssen Sie eine andere Methode zum Konvertieren des UIImage in NSData verwenden. Hier sind zwei Techniken, eine für PNG und eine für JPEG

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

Dies ist eine Anleitung aus dem Facebook-Entwickler-Blog, dass etwas Ähnliches zeigt (obwohl es für ein Video, und nicht die Batch-API) und eine signifikante Der Unterschied zu Ihrem Code besteht darin, dass der übergebene Parameter in NSData-Darstellung und nicht in UIImage angegeben ist.

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

+0

Sehr geehrte Obuseme .. Der gleiche Fehler war aufgetreten, wie ich in meiner Frage gezeigt hatte .. dass Datei file1 wurde nicht beigefügt –

+0

Ok lassen Sie mich überprüfen Das Offensichtliche. Die Bilder sind gültige Objekte und Darstellungen von Bildern, richtig? Können Sie den Code, in dem Sie die Objekte erstellen, veröffentlichen? –

+0

Bitte sehen Sie meinen aktualisierten Code in Frage, ich hatte Code wie das getan ... –

1

Ich empfehle Sie, verwenden Sie den neuen integrierten Facebook-API in iOS 6, dies zu tun, anstatt Facebook-API: https://developer.apple.com/videos/wwdc/2012/?id=306 gibt es ein goldenes WWDC Video für alle soziale Aufgaben. Außerdem ist die Verwendung der neuen APIs in iOS 6 VIEL schneller als die Nutzung von Facebook.

+0

Wie wäre es mit iOS5? –

+0

Wenn Sie iOS 5 für Facebook unterstützen möchten, müssen Sie in die Facebook-APIs eintauchen. Die meisten aktiven Benutzer von iOS sind jedoch auf iOS 6. Da Apple es so einfach macht, auf iOS 6 von iOS 5 zu aktualisieren. Also würde ich mich nicht um die Unterstützung von iOS 5 kümmern. – ManOx

+0

"Die meisten aktiven Benutzer von iOS sind auf iOS 6"? Irgendwelche Statistiken? –

0

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

Dies sollte nicht die Daten sein, es sollte der Pfad für diese Bilder sein. Es wird gut funktionieren, wenn Sie einen Pfad anstelle von NSData angeben.

0

Ich habe die Lösung für mehrere Datei-Upload mit FBgraph.

Hier ist mein 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]; 

} 

Danke mehul.

Verwandte Themen