我正在将图片转换为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字符串上传到服务器,我做错了请帮忙
答案 0 :(得分:0)
如果您在JSON中包含base64图像,则不应该使+
字符转义百分比。只有在创建x-www-form-urlencoded
请求时才会这样做。
因此,请勿将+
字符替换为%2B
。
您要将Content-Type
标题设置两次。您的请求是JSON,因此请删除image/png
标头。有些Web服务会轻率地假设内容类型,但也许您的错误Content-Type
标题会让您感到困惑。
如果它仍然无法正常工作,问题可能是您创建图像的base64再现或请求格式不正确的方式。如果没看到(a)最终请求是什么样的话,很难知道; (b)服务器正在寻找的内容。