iphone - subir - Cargue varias fotos en Facebook usando la Solicitud por lotes
porque las fotos de mi iphone no cargan (5)
Está agregando el binario al Diccionario incorrectamente. Eche un vistazo al método de carga de archivos en la aplicación de ejemplo de Facebook . Debería poder adoptar fácilmente el código de muestra de Facebook para su aplicación.
/**
* 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];
}
Hice el siguiente código con referencia al siguiente link para crear una solicitud por lotes para cargar varias fotos en Facebook.
Tenía una solución para cargar varias fotos en Facebook a través de esta API gráfica de Facebook.
CÓDIGO:
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];
Ahora cuando estoy ejecutando este código obtuve el siguiente resultado.
Diccionario de resultados 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";
}
);
}
)
No sé cómo se adjuntan estos archivos ... ¿Alguien puede ayudarme a resolver este problema?
¿Hay algún cambio en mi código? Por favor, hágamelo saber.
Gracias por adelantado...
Obtuve la solución para cargar archivos múltiples usando FBgraph.
aquí está mi código
-(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];
}
Gracias mehul.
Para su NSDictionary de parámetros, use la representación NSData, en lugar de usar directamente el objeto UIImage.
Dependiendo del formato de compresión de las imágenes que intenta subir, necesitará usar un método diferente para convertir el UIImage a NSData. Aquí hay dos técnicas, una para PNG y otra para JPEG
//...cut...
[params setObject:UIImageJPEGRepresentation(self.jpegImage, 0.8) forKey:@"file1"];
[params setObject:UIImagePNGRepresentation(self.pngImage) forKey:@"file2"];
//...cut...
Este es un tutorial del blog de desarrolladores de Facebook que muestra algo similar (aunque es para un video, y no para el API de proceso por lotes), y una diferencia significativa de su código es que el parámetro pasado está en representación NSData, no en UIImage.
Te recomiendo que uses las nuevas API integradas de Facebook en iOS 6 para hacer esto en lugar de API de Facebook: https://developer.apple.com/videos/wwdc/2012/?id=306 hay un video de oro WWDC para todas las tareas sociales. Además, usar las nuevas API en iOS 6 es MUCHO más rápido que usar Facebook.
[params setObject: UIImagePNGRepresentation (self.image1) forKey: @ "file1"];
Esto no debería ser la información, debería ser la ruta para esas imágenes. Funcionará bien si proporciona una ruta en lugar de NSData.