#ios #objective-c #http-post
#iOS #objective-c #http-post
Вопрос:
Я пытаюсь отправить изображение на веб-сервер, по какой-то причине файл получен поврежденным и размером (102)
Я выполнил поиск на форуме, но не смог найти никакого решения своей проблемы. любая помощь будет одобрена!
мой код ниже:
- (void)postItemImage:(UIImage*)image withKey:(NSString*)key andItemid:(int)itemId;
{
NSData *imageData = UIImageJPEGRepresentation(image, 0.5);
NSLog(@"inside postItemImage");
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:kBasePostUrl]];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"---------------------------14737809831466499882746641449"
;
NSData *boundryData = [[NSString stringWithFormat:@"rn--%@rn", boundary] dataUsingEncoding:NSUTF8StringEncoding];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *body = [NSMutableData data];
[body appendData:boundryData];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="Request"rnrn%@", @"addItemMedia"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:boundryData];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="picture"; filename="swapper.jpg"; rn"]dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:boundryData];
[body appendData:[@"Content-Type: application/octet-streamrnrn" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:boundryData];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:boundryData];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="userId"rnrn%d", [[NSUserDefaults standardUserDefaults] integerForKey:kUserIDKey]] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:boundryData];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="itemId"rnrn%d", itemId] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:boundryData];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="itemMediaType"rnrn%@", key] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:boundryData];
[request setHTTPBody:body];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
NSLog(@"Do in background");
//Do in background
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
if (returnData) {
dispatch_sync(dispatch_get_main_queue(), ^{
//Do in Main thread
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"return: %@", returnString);
[self.delegate uploadFinishedWithResponse:returnString];
});
}
});
}
Комментарии:
1. NSURLConnection является асинхронным. Почему вы хотите, чтобы оно отправлялось с синхронным запросом? Просто любопытно узнать.
2. Я Ранее успешно тестировал API с использованием этого кода, поэтому я попытался восстановить рабочий код как есть….
Ответ №1:
При передаче изображений я бы посоветовал использовать base64.
вы должны закодировать его у отправителя, затем декодировать на другом.
В Интернете есть множество руководств по кодированию / декодированию base64.