POST multipart / form-data с Objective-C для изображения и других параметров - PullRequest
0 голосов
/ 25 декабря 2018

Я просмотрел большое количество статей о том, как выполнить POST-тест multipart / form-data на iOS, но ни одна из них не объясняет, что делать, если были нормальные параметры, а также загрузка файла.

Я использовал POST multipart / form-data на iOS, и я написал следующий код, и он загружает данные, но не данные изображения

  - (void)postWithImage:(NSDictionary *)dictionary

{

NSString *urlString = [NSString stringWithFormat:@"YourHostString"];

NSURL *url = [NSURL URLWithString:urlString];
NSString *boundary = @"----1010101010";

//  define content type and add Body Boundry
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];

NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

NSEnumerator *enumerator = [dictionary keyEnumerator];
NSString *key;
NSString *value;
NSString *content_disposition;

while ((key = (NSString *)[enumerator nextObject])) {

    if ([key isEqualToString:@"file"]) {

        value = (NSString *)[dictionary objectForKey:key];

        NSData *postData = UIImageJPEGRepresentation([UIImage imageNamed:value], 1.0);
        [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\";\r\nfilename=\"screen.png\"\r\n\r\n",value] dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:postData];
    } else {
        value = (NSString *)[dictionary objectForKey:key];

        content_disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key];
        [body appendData:[content_disposition dataUsingEncoding:NSUTF8StringEncoding]];
        NSError *error;
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:value options:NSJSONWritingPrettyPrinted error:&error];
        [body appendData:jsonData];
        //[body appendData:[value dataUsingEncoding:NSUTF8StringEncoding]];

    }

    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

}

//Close the request body with Boundry
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

[request setHTTPBody:body];
[request addValue:[NSString stringWithFormat:@"%d", body.length] forHTTPHeaderField: @"Content-Length"];

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"%@", returnString);

}

Может кто-нибудь помочь мне понять, почему данные изображений не загружаются

1 Ответ

0 голосов
/ 25 декабря 2018

Я думаю, вы должны добавить @"content-Type", прежде чем добавлять реальные данные, например:

[body appendData:[@"Content-Type: image/png\r\n\r\n"
dataUsingEncoding:NSUTF8StringEncoding]];
...