objective-c post data&图片

时间:2012-12-07 18:46:55

标签: objective-c post asihttprequest afnetworking

我是objective-c的新手,我一直在寻找一种方法向我的服务器发送一个帖子请求(基于Rest URL),但也包含一个图像...我发现了很多发布数据的方法...以及发布图像的方法,但没有任何结合两者的方法......

我正在寻找一个包装器,类或库,因为从头开始编写所有这些似乎是一项繁琐的工作。我找到了“ASIHTTPRequest”,但不再支持,虽然我关闭了ARC,我宁愿找到一些仍然支持的东西......

我还发现了AFNetworking,它似乎仍然受到支持,但我可能错了,我找不到一个解决方案来组合非常简单的数据和个人资料图像......

感谢任何帮助?

我应该只使用ASIHTTPRequest库吗?或者有没有人有AFNetworking库的示例代码?

以下是我用于AFnetworking库的代码......

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                        _emailAddressField.text, @"email",
                        _usernameField.text, @"username",
                        _passwordField.text, @"password",
                        nil];

AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:%"http://url.com/api/whatever/"];

[client postPath:@"/" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject)
{

    NSString *text = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
    NSLog(@"Response: %@", text);

} failure:^(AFHTTPRequestOperation *operation, NSError *error)
{

    NSLog(@"%@", [error localizedDescription]);

}];    

1 个答案:

答案 0 :(得分:0)

如果您正在使用AFNetworking,则可以使用multipartFormRequestWithMethod上传图片:

// Create the http client
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseUrl:url];
// Set parameters
NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys: @"param1", @"key1", nil];
// Create the request with the image data and file name, mime type, etc.
NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:method path:@"url/to/" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    [formData appendPartWithFileData:data name:nameData fileName:fileName mimeType:mimeType];
}];

然后您可以添加上传进度块以获取上传过程的反馈:

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
    //Manage upload percentage
}];

此外,您可以添加setCompletionBlockWithSuccess以捕获操作中的成功和失败。可以找到更多信息here。最后但同样重要的是,将请求添加到操作队列:

[httpClient enqueueHTTPRequestOperation:operation];