【问题标题】:How to send base64 string through NSUrlSession IOS如何通过 NSUrlSession IOS 发送 base64 字符串
【发布时间】:2017-01-24 06:46:00
【问题描述】:

当我将图像转换为 base64 字符串并使用 NSURLSessionsDataTask 将其上传到服务器时-

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字符串上传到服务器我做错了什么请帮助

【问题讨论】:

  • 顺便说一句,NSData *postData = postData = [NSJSONSerialization ...]; 不正确。摆脱多余的postData。同样,NSString *postString = = ... 也不正确。你有一个额外的= 在那里......
  • 我在这里输入了它,这就是为什么它看起来像这样,但在代码中它是完美的

标签: ios json base64 nsurlsession nsurlsessiondatatask


【解决方案1】:

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

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


您设置了两次Content-Type 标头。您的请求是 JSON,因此请删除 image/png 标头。一些 Web 服务会轻松地假定内容类型,但您的服务可能会被不正确的 Content-Type 标头弄糊涂。


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

【讨论】:

  • 您的内容类型标头不正确。请参阅上面的扩展答案。
猜你喜欢
  • 1970-01-01
  • 2020-02-17
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 2020-08-16
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多