AFNetworking,使用 POST 上传简单的 NSData

Posted

技术标签:

【中文标题】AFNetworking,使用 POST 上传简单的 NSData【英文标题】:AFNetworking, upload simple NSData with POST 【发布时间】:2013-01-10 17:15:20 【问题描述】:

我使用 setObject forKey 创建了一个包含数组和字符串以及其他客户端信息的 NSDictionary。当我 NSLog 数据时,一切看起来都很棒,格式正是它应该的方式。我还将我的 NSDictionary 转换为 NSData:

NSData *userData = [NSJSONSerialization dataWithJSONObject:userDict options:NSJSONWritingPrettyPrinted error:&error];

我需要知道的是如何使用 POST 将其上传到服务器。我找到了以下代码 sn-p 来上传照片。我的问题是我可以简单地使用我的 NSDictionary 作为参数(请求中的参数),它有点大。如果没有,我如何发送我的 NSData 对象 userData?我真的很喜欢 AFNetworking,并且一直使用它来满足我所有的下载需求。这是我第一次上传对象。 谢谢

NSData *imageData = UIImagePNGRepresentation(pageImage);

AFHTTPClient *client= [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://www.SERVER.com"]];


//You can add POST parameteres here
NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                    author, @"author",
                    title, @"title",
                    nil];

NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:@"/PATH/TO/WEBSERVICE.php" parameters:params constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) 

//This is the image
[formData appendPartWithFileData: imageData name:@"cover_image" fileName:@"temp.png" mimeType:@"image/png"];


];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

//Setup Upload block to return progress of file upload
[operation setUploadProgressBlock:^(NSInteger bytesWritten, long long totalBytesWritten,     long long totalBytesExpectedToWrite) 
float progress = totalBytesWritten / (float)totalBytesExpectedToWrite;
NSLog(@"Upload Percentage: %f %%", progress*100);
];




//Setup Completeion block to return successful or failure
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id     responseObject) 
NSString *response = [operation responseString];
NSLog(@"response: [%@]",response);
//Code to run after webservice returns success response code

 failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    NSLog(@"error: %@", [operation error]);
    //Code to Run if Failed

];

[operation start];

【问题讨论】:

【参考方案1】:

我不确定我是否完全理解你的问题,但无论如何我都会尝试一下。

我的问题是我可以简单地使用我的 NSDictionary 作为参数(请求中的参数),它有点大。

我想是的。试一试吧……最后这些数组会转换成数据发送到服务器,如果服务器能处理的话,应该没有问题。

如果没有,我如何发送我的 NSData 对象 userData?

应在您发布的代码指定imageData 的位置提供您发送的数据。请记住,如果您上传的内容不是文件(您提到 NSData),那么您可能需要使用appendPartWithFormData:name。这再次取决于您的服务器端。

希望这能澄清一点。

【讨论】:

谢谢!!!需要修复服务器上的一些错误,但它对我来说就像一个魅力。爱AFNetworking!!!

以上是关于AFNetworking,使用 POST 上传简单的 NSData的主要内容,如果未能解决你的问题,请参考以下文章

尽管上传成功,但调用了 AFNetworking 2.0 POST + PHP 阻止失败

AFNetworking POST 写入服务器并返回失败错误(Cocoa 错误 3840)

iOS-三方框架AFNetworking基本使用

如何在上传带参数的图像时使用 AFNetworking 2.0 设置 cookie?

如何在 Xcode 8 和 iOS 10 中使用 AFNetworking 类和 Swift 3 上传图像

obj-c AFNetworking 2.0 POST 请求不起作用