0

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

我正在寻找一个包装器、类或库,因为从头开始编写所有这些似乎是一项乏味的任务。我找到了“ASIHTTPRequest”,但这不再受支持,虽然 Ic 关闭了 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]);

}];    
4

1 回答 1

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以捕获操作中的成功和失败。更多信息可以在这里找到。最后但同样重要的是,将请求添加到操作队列:

[httpClient enqueueHTTPRequestOperation:operation];
于 2012-12-10T10:14:02.053 回答