Nick Smith
Nick Smith

Reputation: 11

Post base64String of image with other parameters to server Objective c

I have image and I need to send that image with other parameters to server.

I convert image to base64 string.

[UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

In header params I send this.

"Content-Type" = "application/x-www-form-urlencoded";

NSURLSessionDataTask * task = [session dataTaskWithRequest:self completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { .... }

It's my params format

data={"img":"","imgName":"imgName"}

When I send "img":"iVBORw0KGgoAAAANSUhEUgAAAZUA.." I get 401 error

Please help me if anyone could find problem, or know how to send base64 string with other parameters. Thank You!

Upvotes: 0

Views: 198

Answers (1)

Kevin Lin
Kevin Lin

Reputation: 97

Try this.

UIImage *image = yourImage;
NSString *imageBase64Str = [NSString stringWithFormat:@"%@;base64,%@",
 [self mimeTypeByGuessingFromData:imageData], [self encodeToBase64String:image]];

data={"doc":"true","img":"imageBase64Str","imgName":"imgName"}

- (NSString *)mimeTypeByGuessingFromData:(NSData *)data {
    char bytes[12] = {0};
    [data getBytes:&bytes length:12];
    const char bmp[2] = {'B', 'M'};
    const char gif[3] = {'G', 'I', 'F'};
    const char swf[3] = {'F', 'W', 'S'};
    const char swc[3] = {'C', 'W', 'S'};
    const char jpg[3] = {0xff, 0xd8, 0xff};
    const char psd[4] = {'8', 'B', 'P', 'S'};
    const char iff[4] = {'F', 'O', 'R', 'M'};
    const char webp[4] = {'R', 'I', 'F', 'F'};
    const char ico[4] = {0x00, 0x00, 0x01, 0x00};
    const char tif_ii[4] = {'I','I', 0x2A, 0x00};
    const char tif_mm[4] = {'M','M', 0x00, 0x2A};
    const char png[8] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a};
    const char jp2[12] = {0x00, 0x00, 0x00, 0x0c, 0x6a, 0x50, 0x20, 0x20, 0x0d, 0x0a, 0x87, 0x0a};
    if (!memcmp(bytes, bmp, 2)) {
        return @"image/x-ms-bmp";
    } else if (!memcmp(bytes, gif, 3)) {
        return @"image/gif";
    } else if (!memcmp(bytes, jpg, 3)) {
        return @"image/jpeg";
    } else if (!memcmp(bytes, psd, 4)) {
        return @"image/psd";
    } else if (!memcmp(bytes, iff, 4)) {
        return @"image/iff";
    } else if (!memcmp(bytes, webp, 4)) {
        return @"image/webp";
    } else if (!memcmp(bytes, ico, 4)) {
        return @"image/vnd.microsoft.icon";
    } else if (!memcmp(bytes, tif_ii, 4) || !memcmp(bytes, tif_mm, 4)) {
        return @"image/tiff";
    } else if (!memcmp(bytes, png, 8)) {
        return @"image/png";
    } else if (!memcmp(bytes, jp2, 12)) {
        return @"image/jp2";
    }
    return @"application/octet-stream"; // default type
}

- (NSString *)encodeToBase64String:(UIImage *)image {
    return [UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
}

Upvotes: 0

Related Questions