使用批量请求在Facebook上上传多张照片

时间:2012-04-24 04:26:58

标签: iphone objective-c ipad facebook-graph-api

我参考以下link完成了以下代码,以创建在Facebook上传多张照片的批量请求。

我通过此Facebook graph API.

获得了在Facebook上传多张照片的解决方案

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

现在,当我运行此代码时,我得到了以下输出。

结果词典 - (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";
            }
        );
    }
)

我不知道这些文件是如何附加的。任何人都可以帮我解决这个问题。

我的代码有任何变化,请告诉我。

提前致谢...

5 个答案:

答案 0 :(得分:1)

我建议你使用iOS 6中新的集成Facebook API来代替Facebook的API:https://developer.apple.com/videos/wwdc/2012/?id=306这里有一个适用于所有社交任务的黄金WWDC视频。另外,使用iOS 6中的新API比使用Facebook更快。

答案 1 :(得分:0)

对于NSDictionary参数,请使用NSData表示,而不是直接使用UIImage对象。

根据您尝试上传的图像的压缩格式,您需要使用其他方法将UIImage转换为NSData。这里有两种技术,一种用于PNG,另一种用于JPEG

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

这是来自Facebook开发人员博客的一个教程,它显示了类似的内容(尽管它适用于视频,而不是批处理API),与代码的一个显着区别是传递的参数是NSData表示,而不是UIImage

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

答案 2 :(得分:0)

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

这不应该是数据,它应该是该图像的路径。如果您提供路径而不是NSData,它将正常工作。

答案 3 :(得分:0)

我使用FBgraph获得了多文件上传的解决方案。

这是我的代码。

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

}

谢谢mehul。

答案 4 :(得分:-1)

您正在错误地将二进制文件添加到词典中。请查看Facebook's sample app中的文件上传方法。您应该能够轻松地将Facebook的示例代码应用到您的应用程序中。

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