如何通过NSUrlSession IOS发送base64字符串

时间:2017-01-24 06:46:00

标签: ios json base64 nsurlsession nsurlsessiondatatask

我正在将图片转换为base64字符串并使用NSURLSessionsDataTask将其上传到serer -

NSString *encodedString =  [[self encodeToBase64String:imgParcel]stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"];

[self.package.arrParcelImages addObject:encodedString]

并像这样发送......

NSDictionary *postParameters = @{@"userID":@"1",@"images":self.package.arrParcelImages}

NSData *postData = [NSJSONSerialization dataWithJSONObject:postParameters options:NSJSONWritingPrettyPrinted error:&error];

NSString *dataString = = [[NSString alloc] initWithData:postData encoding:NSUTF8StringEncoding];

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];

NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration  delegate:self delegateQueue:nil];


NSURL *url = [NSURL URLWithString:urlString];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"image/png" forHTTPHeaderField:@"Content-Type"];

 NSString *strValue = [NSString stringWithFormat:@"%@",[USER_DEFAULTS objectForKey:UD_X_API_VALUE]];
    if (strValue != nil) {
         [request addValue:strValue forHTTPHeaderField:[USER_DEFAULTS objectForKey:UD_X_API_KEY]];
    }

[request setHTTPMethod:@"POST"];
[request setHTTPBody:postData];

NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *taskData, NSURLResponse *taskResponse, NSError *taskError) {
    //NSLog(@"Start - Response:%@ %@\n", taskResponse, taskError);

    dispatch_async(dispatch_get_main_queue(), ^{
        if (taskError) {
            NSLog(@" Error = %@",[taskError localizedDescription]);
            completionBlock(nil,taskError,task);
        }
        else {
            NSError* error;
            NSDictionary* json = [NSJSONSerialization JSONObjectWithData:taskData options:kNilOptions error:&error];

            if (json) {
                NSLog(@" JSON = %@",json);
            }
            else {
                NSString* newStr = [[NSString alloc] initWithData:taskData encoding:NSUTF8StringEncoding];
                NSLog(@"Error: %@",newStr);

            }

            completionBlock(json,nil,task);
        }

    });
}];
[postDataTask resume];

但是这不是将base64字符串上传到服务器,我做错了请帮忙

1 个答案:

答案 0 :(得分:0)

如果您在JSON中包含base64图像,则不应该使+字符转义百分比。只有在创建x-www-form-urlencoded请求时才会这样做。

因此,请勿将+字符替换为%2B

您要将Content-Type标题设置两次。您的请求是JSON,因此请删除image/png标头。有些Web服务会轻率地假设内容类型,但也许您的错误Content-Type标题会让您感到困惑。

如果它仍然无法正常工作,问题可能是您创建图像的base64再现或请求格式不正确的方式。如果没看到(a)最终请求是什么样的话,很难知道; (b)服务器正在寻找的内容。

相关问题