本文主要是介绍NSURLSession如何上传图片的同时带有参数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
好久没有写过博客了,之前一直在小公司做搬运工。现在幡然醒悟开始做些研究性的东西吧。nsurlsession是AFNetworking3.0优化以后才引起我的注意的。这次从头写起,就是把请求这块从零开始熟悉熟悉。好了,开始说说我写的思路。之前都是用AFHTTPRequestOperationManager做请求的接口封装,今天封装的时候也是仿照它做的NSURLSession。
既然是参数和图片同一个接口使用。首先将需要的参数封装成一个字典作为参数传入封装的类。
其实这里并没有太大的难点,就是遇到的数据成功以后返回的NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject不知道是什么东东。以至于浪费了好久才将数据转换成字符串和字典。
-(void)uploadImages:(NSArray *)imageArray type:(NetworkRequestType)type info:(NSDictionary *)requestInfo andBlock:(void (^)(NSString* result, NSError *error))block
{
NSString *urlString = nil;
switch (type) {
case JsonNet_Register:
{
urlString = [self setParameter:requestInfo withBaseUrl:[NSString stringWithFormat:@"%@appRegister/register",Main_Domain]];
}break;
default:
break;
}
urlString = [[NSString stringWithFormat:@"%@",urlString] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.HTTPCookieAcceptPolicy = NSHTTPCookieAcceptPolicyAlways;
configuration.HTTPShouldSetCookies = YES;
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:configuration];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager.responseSerializer setAcceptableContentTypes: [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain", nil]];
[manager.requestSerializer setTimeoutInterval:30];
//公参
/*这里是我们项目要求的公用参数*/
NSDictionary *clientDic =@{@"userId":(userId?userId:@""),@"device":version,@"ip":ipStr,@"country":(countryStr?countryStr:@""),@"language":languageStr,@"Resolution":Resolution,@"osType":@"0",@"token":(netToken?netToken:@""),@"currentTime":reqTime};
//将公参和个参合成一个字典
NSDictionary *parameters = [self setParameters:clientDic withCurrentDic:requestInfo];
[manager POST:urlString parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
//使用for循环将多张图片作为文件上传到自己的服务器
for (int i = 0; i < [imageArray count]; ++i)
{
NSString *imageKey = [NSString stringWithFormat:@"headIcon"];
UIImage *image = [imageArray objectAtIndex:i];
NSData *data = UIImageJPEGRepresentation(image,1.0);
[formData appendPartWithFileData :data name:imageKey fileName:[NSString stringWithFormat:@"image%d.png",i+1] mimeType:@"multipart/form-data"];
}
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
/*这里就是浪费我好久时间的地方*/
NSString *serilizationString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
block(serilizationString,nil);
} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
block(nil,error);
}];
}
这篇关于NSURLSession如何上传图片的同时带有参数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!