[英]How should I send a dictionary by multipart/form-data in iOS?
[英]How to send put request with multipart form data in iOS objective c?
想要發送帶有圖像和字符串數據的放置請求。這是我的代碼,以供進一步參考。
+(void)uploadProfileImage:(NSData*)imageData forDeviceNumber: (NSString*)number withDelegate:(id)delegate{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[NSUserDefaults standardUserDefaults] setObject:@"Profile Image Upload" forKey:@"WHARRU_CALLED_API"];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy HH:mm:ss"];
[SharableClass addLogForAPI:@"Profile Image Upload" withtimeStamp:[dateFormatter stringFromDate:[NSDate date]] message:@"API Called." withDelegate:delegate];
[[NSUserDefaults standardUserDefaults] synchronize];
NSString *parameter = @"\{\"deviceId\" : \"919555347279\", \"name\" : \"intervention\", \"emergencyContacts\" : \"10046\", \"photo\" : \"10046\"}"; // The rest of your parmas here
////////////////////////////////////////////////////
NSString *registeredServer = [SharableClass getDataFromDBForKey:@"server"];
NSString *APIURL = @"/api/updateProfile/updateImage";
NSString *urlString = [NSString stringWithFormat:@"%@%@", registeredServer, APIURL];
NSLog(@"\n\nURL String\n%@\n\n", urlString);
NSURL *url = [NSURL URLWithString:urlString];
NSString *urlString2 = @"img/logo.png";
NSData* file = [NSData dataWithContentsOfFile: [urlString2 stringByExpandingTildeInPath]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];
[request setHTTPMethod:@"PUT"];
[request addValue:@"multipart/form-data" forHTTPHeaderField:@"Content-Type"];
NSMutableData *putData = [NSMutableData data];
[request setHTTPBody:[parameter dataUsingEncoding:NSUTF8StringEncoding]];
NSData *jsonData = [parameter dataUsingEncoding:NSUTF8StringEncoding];
[putData appendData:[NSData dataWithData:jsonData]];
[putData appendData:[NSData dataWithData:file]];
[request setHTTPBody:putData];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
if([data length] >0 && error == nil){
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy HH:mm:ss"];
[SharableClass addLogForAPI:@"Profile Image Upload" withtimeStamp:[dateFormatter stringFromDate:[NSDate date]] message:@"API Success." withDelegate:delegate];
__block NSError *error1;
__block NSMutableDictionary *resultsDictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error1];
NSLog(@"Result Dictionary-: %@", resultsDictionary);
}else if([data length] == 0 && error == nil){
NSLog(@"There is no data.");
}else if(error != nil){
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy HH:mm:ss"];
[SharableClass addLogForAPI:@"Profile Image Upload" withtimeStamp:[dateFormatter stringFromDate:[NSDate date]] message:@"API Failed." withDelegate:delegate];
NSString * response = [NSString stringWithFormat:@"Result dictionary is-: %@", error];
NSString *subStr = [SharableClass getSubsrtring:response betweenString:@"\""and:@"\""];
NSLog(@"Error-: %@", subStr);
}
}];
});
}
我建議您使用AFNetworking
框架,因為它可以簡化很多與您的網絡請求有關的內容。
更確切地說,它具有PUT
方法:
- (AFHTTPRequestOperation *)PUT:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
編輯改用此方法(如在此答案中指定的https://stackoverflow.com/a/30388087/1420112 ):
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSError *error;
NSURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"PUT" URLString:@"http://example.com/rest/api/" parameters:@{@"foo" : @"bar"} constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
NSString *value = @"qux";
NSData *data = [value dataUsingEncoding:NSUTF8StringEncoding];
[formData appendPartWithFormData:data name:@"baz"];
} error:&error];
NSURLSessionDataTask *task = [manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
if (error) {
NSLog(@"%@", error);
return;
}
NSLog(@"%@", responseObject);
}];
[task resume];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.