AFNetworking 2.0 多部分/表单数据上传到 mySQL

Posted

技术标签:

【中文标题】AFNetworking 2.0 多部分/表单数据上传到 mySQL【英文标题】:AFNetworking 2.0 multipart/form-data upload to mySQL 【发布时间】:2015-07-22 08:51:20 【问题描述】:

我尝试了很多东西,但似乎无法正常工作。我可以通过 UITextField 将文本上传到 mysql 数据库,也可以通过 UIImageView 单独上传图像,但是当我尝试将它们放在一起时它不起作用:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"application/json",nil];
NSDictionary *parameters = @@"new": self.enter;
NSData *imageData = UIImageJPEGRepresentation(self.uploadImage.image, 0.5);
[manager POST:@"http://emily-ip.com/write.php" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) 
            [formData appendPartWithFileData:imageData name:@"image" fileName:@"photo.jpg" mimeType:@"image/jpeg"];
 success:^(AFHTTPRequestOperation *operation, id responseObject) 
    NSLog(@"Success: %@", responseObject);
 failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    NSLog(@"Error: %@", error);
];

这段代码给了我错误:

"The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0x7fabeb081660 

所以我把这个放进去:

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

这会上传图像,但不会上传从文本字段输入的文本,这是我得到的输出:

Success: <4572726f 72>
Success: <53756363 65737366 756c>

我看了这么多帖子,但我找不到问题。无论如何,我认为它与文本字段有关。有人可以帮我修复代码吗?

【问题讨论】:

【参考方案1】:

我想通了。这是从文本字段和 UIImageVIew 发布图像和文本:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"application/json",nil];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
NSDictionary *parameters = @@"new": self.enter.text;
NSData *imageData = UIImageJPEGRepresentation(self.uploadImage.image, 0.5);
[manager POST:@"http://emily-ip.com/write.php" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) 
            [formData appendPartWithFileData:imageData name:@"image" fileName:@"photo.jpg" mimeType:@"image/jpeg"];
 success:^(AFHTTPRequestOperation *operation, id responseObject) 
    NSLog(@"Success: %@", responseObject);
 failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    NSLog(@"Error: %@", error);
];

【讨论】:

以上是关于AFNetworking 2.0 多部分/表单数据上传到 mySQL的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 2.0:多部分 POST 时出现错误 503

获取 System.InvalidOperationException:请求格式无效:通过 AFNetworking 上传图像(数据)时出现多部分/表单数据错误

Alamofire 2.0 多部分表单数据错误

使用 Retrofit 2.0 发布多部分表单数据,包括图像

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

NSURLErrorDomain Code=-999 使用 AFNetworking 示例代码