希望通过使用AFNetworking 2.0将一些数据(字符串和文件)发送到服务器.不知何故,POST请求的数据(对于一个forumlar)是不正确的,它看起来像是请求上的编码/序列化丢失.由于服务器无法使用我上传的数据.
如何将编码/序列化设置为请求?
我假设URL格式参数编码,必须设置.文档说明
[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters];
我试图这样做,但我不知道如何做到正确.通过以下Xcode通过警告:
manager.requestSerializer = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters];
/…/CameraviewController.m:105:31: Incompatible pointer types assigning to ‘AFHTTPRequestSerializer *’ from ‘NSMutableuRLRequest *’
在我的源代码下面
CameraviewController.h
#import <UIKit/UIKit.h> @interface CameraviewController : UIViewController <UIImagePickerControllerDelegate,UINavigationControllerDelegate> @property (weak,nonatomic) IBOutlet UIImageView *imageView; @end
CameraviewControllerView.m
#import "CameraviewController.h"
#import "AFHTTPRequestOperationManager.h"
@interface CameraviewController ()
@property (nonatomic) int photoIsTaken;
@end
@implementation CameraviewController
// removed unecessary code for this question
- (void)upload {
NSLog(@"%s: uploader ",__FUNCTION__);
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"latitude": @"8.444444",@"longitude": @"50.44444",@"location": @"New York",@"type": @"2",@"claim": @"NYC",@"flag": @"0",@"file": UIImageJPEGRepresentation(self.imageView.image,0.2)};
Nsstring *URLString = @"http://192.168.1.157/tapp/laravel/public/foobar/upload";
manager.requestSerializer = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters];
[manager POST:URLString parameters:parameters success:^(AFHTTPRequestOperation *operation,id responSEObject) {
NSLog(@"JSON: %@",responSEObject);
} failure:^(AFHTTPRequestOperation *operation,NSError *error) {
NSLog(@"Error: %@,%@",error,operation.responseString);
}];
[self dismissViewControllerAnimated:NO completion:nil];
}
@end
解决方法
最后它工作.是一个麻烦,但现在我真的很开心…在我的测试期间,我有一些问题,“请求身体流量耗尽”在Wifi,什么是奇怪的.
在为我做的伎俩的代码下面.
- (void)upload {
// !!! only JPG,PNG not covered! Have to cover PNG as well
Nsstring *fileName = [Nsstring stringWithFormat:@"%ld%c%c.jpg",(long)[[NSDate date] timeIntervalSince1970],arc4random_uniform(26) + 'a',arc4random_uniform(26) + 'a'];
// NSLog(@"FileName == %@",fileName);
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"lat": @"8.444444",@"lng": @"50.44444",@"flag": @"0"};
// BASIC AUTH (if you need):
manager.securityPolicy.allowInvalidCertificates = YES;
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
[manager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"foo" password:@"bar"];
// BASIC AUTH END
Nsstring *URLString = @"http://192.168.1.157/tapp/laravel/public/foobar/upload";
/// !!! only jpg,have to cover png as well
NSData *imageData = UIImageJPEGRepresentation(self.imageView.image,0.5); // image size ca. 50 KB
[manager POST:URLString parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:imageData name:@"file" fileName:fileName mimeType:@"image/jpeg"];
} success:^(AFHTTPRequestOperation *operation,id responSEObject) {
NSLog(@"Success %@",responSEObject);
} failure:^(AFHTTPRequestOperation *operation,NSError *error) {
NSLog(@"Failure %@,operation.responseString);
}];
[self dismissViewControllerAnimated:NO completion:nil];
}