Iphone 使用批处理请求在Facebook上上传多张照片

Iphone 使用批处理请求在Facebook上上传多张照片,iphone,objective-c,ipad,facebook-graph-api,Iphone,Objective C,Ipad,Facebook Graph Api,我已经完成了以下代码,并参考以下内容创建了在Facebook上传多张照片的批处理请求 我已经找到了一些解决方案,可以通过这个在Facebook上上传多张照片 代码: NSString *jsonRequest1 = @"{ \"method\": \"POST\", \"relative_url\": \"me/photos\" , \"body\": \"Hello 1\", \"attached_files\": \"file1\" }"; NSString *jsonReq

我已经完成了以下代码,并参考以下内容创建了在Facebook上传多张照片的批处理请求

我已经找到了一些解决方案,可以通过这个在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)请求:(FBRequest*)请求didLoad:(id)结果

(
        {
        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的示例代码应用到您的应用程序中

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

对于NSData参数字典,请使用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


我建议您使用iOS 6中新的集成Facebook API而不是Facebook的API来实现这一点:所有社交任务都有一个金色的WWDC视频。另外,在iOS 6中使用新的API比使用Facebooks快得多。

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


这不应该是数据,而应该是图像的路径。如果您提供一个路径而不是NSData,它将很好地工作。

我获得了使用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。

这是我想上传到Facebook上的UIImage。你是否尝试过访问此网站:看起来非常有用希望此帮助我在这里提问之前看到此链接亲爱的..它仅适用于文件1?mehul,如果你有解决方案,你能发布你的答案吗?你是对的,亲爱的,但是你的代码会在Facebook上同时上传两张图片吗???@Jennis:我确实读过这个问题。您是否尝试将示例应用程序中的代码应用到Mehul的代码中?您可以将多个图像二进制文件添加到字典中,并将“file1”和“file2”作为键。。发生了与我在问题中所显示的相同的错误。。该文件file1尚未被附加。让我再次检查一下明显的问题。这些图像是有效的对象和图像的表示,对吗?你能在创建对象的地方发布代码吗?我在代码中没有看到任何地方验证图像对象是否为零。我确信图像对象不是零,因为我只发布图片。请在方法NSLog(@“image=%@param=%@”,self.image1,params)的末尾添加此代码;请给我看看输出。THX支持iOS5怎么样?如果你想在Facebook上支持iOS5,你必须深入研究Facebooks API。不过,iOS的大多数活跃用户都在iOS 6上。因为苹果让从iOS 5升级到iOS 6变得如此简单。所以我不担心支持iOS 5。“iOS的大多数活跃用户都在iOS 6上”?有什么统计数字吗?由于设置应用程序可以轻松更新uber。。。。难怪。