【问题标题】:Upload multiple photos on Facebook using Batch Request使用批量请求在 Facebook 上上传多张照片
【发布时间】:2012-05-04 17:24:47
【问题描述】:

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

我有一些解决方案可以通过Facebook graph API. 在 Facebook 上上传多张照片

代码:

    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";
            }
        );
    }
)

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

我的代码有什么变化吗,请告诉我。

提前谢谢...

【问题讨论】:

  • 这是我要上传到 Facebook 的 UIImage。
  • 您是否尝试过访问此站点:developers.facebook.com/docs/reference/api/batch 看起来很有帮助希望这会有所帮助
  • 亲爱的在这里提问之前我已经看过这个链接了..
  • 它只适用于 file1 吗?
  • Mehul,如果你有解决方案,你能发表你的答案吗?

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


【解决方案1】:

我建议您使用 iOS 6 中新集成的 Facebook API,而不是 Facebook 的 API:https://developer.apple.com/videos/wwdc/2012/?id=306 有一个用于所有社交任务的黄金 WWDC 视频。另外,在 iOS 6 中使用新的 API 比使用 Facebook 快得多。

【讨论】:

  • 支持iOS5怎么样?
  • 如果您想为 Facebook 支持 iOS 5,您必须深入研究 Facebook 的 API。然而,大多数 iOS 活跃用户都使用 iOS 6。由于 Apple 让从 iOS 5 升级到 iOS 6 变得如此简单。所以我不会担心支持 iOS 5。
  • "iOS 的最活跃用户使用的是 iOS 6" ?有统计数据吗?
  • redmondpie.com/… 因为设置应用更新超级容易......这也难怪。
【解决方案2】:

对于参数的 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/

【讨论】:

  • 亲爱的 Obuseme.. 发生了与我在问题中显示的相同的错误.. 文件 file1 尚未附加
  • 好的,让我仔细检查一下显而易见的。图像是有效的对象和图像的表示,对吧?您可以在创建对象的位置发布代码吗?
  • 我在代码中没有看到您验证图像对象不为零的任何地方。
  • 我确定图像对象不为零,因为我只发布图片
  • 请在方法的末尾加上这段代码 NSLog(@"image=%@ param=%@", self.image1, params);请告诉我输出。谢谢
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    我得到了使用 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];
    
    }
    

    谢谢你。

    【讨论】:

      【解决方案5】:

      您将二进制文件错误地添加到字典中。看看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];
      }
      

      【讨论】:

      • 你说得对,但是你的代码是在 Facebook 上同时上传两张图片吗??
      • @Jennis:我确实读过这个问题。您是否尝试将示例应用程序中的代码用于 Mehul 的代码?您可以使用“file1”和“file2”作为键将多个图像二进制文件添加到字典中。
      猜你喜欢
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多