无法在 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的主要内容,如果未能解决你的问题,请参考以下文章

AFNetwork 作用和用法详解

Objective-C 如何使用 AFNetwork 上传字符串

AFNetwork、Magical Record和块内保存

Swift 的 AFNetwork [关闭]

我是不是需要将 Alamofire 请求打包成 AFNetwork 之类的东西?

如何使用 AFNetwork 的 AFHTTPRequestOperationManager 设置 HTTP 请求正文?