POST jpeg upload with AFNetworking
NSData* sendData = [self.fileName.text dataUsingEncoding:NSUTF8StringEncoding]; NSDictionary *sendDictionary = [NSDictionary dictionaryWithObject:sendData forKey:@"name"]; AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:remoteUrl]; NSMutableURLRequest *afRequest = [httpClient multipartFormRequestWithMethod:@"POST" path:@"/photos" parameters:sendDictionary constructingBodyWithBlock:^(id <AFMultipartFormData>formData) { [formData appendPartWithFileData:photoImageData name:self.fileName.text fileName:filePath mimeType:@"image/jpeg"]; } ]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:afRequest]; [operation setUploadProgressBlock:^(NSInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) { NSLog(@"Sent %d of %d bytes", totalBytesWritten, totalBytesExpectedToWrite); }]; [operation setCompletionBlock:^{ NSLog(@"%@", operation.responseString); //Gives a very scary warning }]; [operation start];
+ (NSDictionary*)parametersOfUser:(User*)user{ if (user) { NSMutableDictionary *returnDict = [NSMutableDictionary dictionaryWithCapacity:0]; if (user.userId && [user.userId length]) { [returnDict setObject:[user.userId urlEncoded] forKey:@"userId"]; } if (user.userName && [user.userName length]) { [returnDict setObject:[user.userName urlEncoded] forKey:@"userName"]; } if (user.phone && [user.phone length]) { [returnDict setObject:[user.phone urlEncoded] forKey:@"phone"]; } if (user.email && [user.email length]) { [returnDict setObject:[user.email urlEncoded] forKey:@"email"]; } [returnDict setObject:[user.deviceId urlEncoded] forKey:@"deviceId"]; [returnDict setObject:[user.deviceType urlEncoded] forKey:@"deviceType"]; [returnDict setObject:[user.osName urlEncoded] forKey:@"osName"]; [returnDict setObject:[user.osVersion urlEncoded] forKey:@"osVersion"]; if (user.pinCodeHash && [user.pinCodeHash length]) { [returnDict setObject:[user.pinCodeHash urlEncoded] forKey:@"pinCodeHash"]; } if (user.publicKey && [user.publicKey length]) { [returnDict setObject:[user.publicKey urlEncoded] forKey:@"publicKey"]; } return returnDict; }return nil; }
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:baseURL]; NSMutableURLRequest *afRequest = [client multipartFormRequestWithMethod:@"POST" path:path parameters:[User parametersOfUser:user] constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { /** *@discussion If we use multipart, we should only have two parts, one for picture (probably type is image/png) and one for other parameters (type is x-www-form-urlencoded) */ //header /* NSString *bodyString = [User postBodyStringWithUser:user withPostType:PostTypeMultiPart]; NSMutableDictionary *headers = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"application/x-www-form-urlencoded; charset=UTF-8",@"Content-Type", [NSString stringWithFormat:@"form-data; name=\"%@\"", @"usr_info"],@"Content-Disposition" , nil]; [formData appendPartWithHeaders:headers body:[bodyString dataUsingEncoding:NSUTF8StringEncoding]]; */ //picture part if (user.picture2) { NSData *data = UIImagePNGRepresentation(user.picture2); //NSLog(@"=====data length is %i",[data length]); [formData appendPartWithFileData:data name:@"picture2" fileName:nil mimeType:@"image/*"]; } }];