Objective c- полученное изображение post повреждено

#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.