无法在 iOS 应用程序中使用 AFNetworking
Posted
技术标签:
【中文标题】无法在 iOS 应用程序中使用 AFNetworking【英文标题】:Unable to use AFNetworking in iOS application 【发布时间】:2015-05-21 05:52:00 【问题描述】:问题是服务器正在返回 json 对象,但说“请选择一个文件”,即使我通过调用函数 appendPartWithFormData 将数据作为 NSData 传递。
请帮帮我,我在这部分卡了很长时间。
谢谢
// Defining dictionary parameters
NSMutableDictionary* _params = [[NSMutableDictionary alloc] init];
[_params setObject:regId forKey:@"id"];
[_params setObject:email forKey:@"email"];
[_params setObject:password forKey:@"password"];
[_params setObject:_formatedDate forKey:@"datesel"];
[_params setObject:self.documentDescription.text forKey:@"description"];
[_params setObject:self.documentName.text forKey:@"name"];
[_params setObject:self.documentType.text forKey:@"type"];
[_params setObject:@"no" forKey:@"isDepedent"];
NSData *imageData = UIImageJPEGRepresentation(self.finalImage.image, 1.0);
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:url parameters:_params constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
[formData appendPartWithFormData:imageData name:@"image"];
success:^(AFHTTPRequestOperation *operation, id responseObject)
NSLog(@"Success %@",responseObject);
UIAlertView *Alert_Success_fail = [[UIAlertView alloc] initWithTitle:@"myappname" message:string delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
[Alert_Success_fail show];
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"Fail ");
UIAlertView *Alert_Success_fail = [[UIAlertView alloc] initWithTitle:@"myappname" message:[error localizedDescription] delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
[Alert_Success_fail show];
];
OUTPUT - Success
data =
message = "Please select file.";
status = 0;
;
【问题讨论】:
首先检查你的 Post 请求在 Postman 中是否正常工作,chrome.google.com/webstore/detail/postman-rest-client/… 如果你在那里得到相同的响应,那么你的后端有问题,如果你在那里成功然后尝试调试你的代码。po imagedata
不为零?
这完全取决于您的服务器的期望。无法判断客户端代码是否正确。
【参考方案1】:
您可以将图像保存为文件,然后上传文件。 AFNetWorkSample:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @@"foo": @"bar";
NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];
[manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
[formData appendPartWithFileURL:filePath name:@"image" error:nil];
success:^(AFHTTPRequestOperation *operation, id responseObject)
NSLog(@"Success: %@", responseObject);
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"Error: %@", error);
];
如果它不起作用,则可能是您的服务器有问题。
【讨论】:
这不起作用,服务器很好,因为android应用正在成功上传图像。以上是关于无法在 iOS 应用程序中使用 AFNetworking的主要内容,如果未能解决你的问题,请参考以下文章
Objective-C 如何使用 AFNetwork 上传字符串
我是不是需要将 Alamofire 请求打包成 AFNetwork 之类的东西?
如何使用 AFNetwork 的 AFHTTPRequestOperationManager 设置 HTTP 请求正文?