iOS10以下,AFNetworking上傳照片,發(fā)生內(nèi)存泄漏;因此用NSURLSesion實現(xiàn)上傳照片,代碼如下:
NSString *urlStr = [[self class] createImgUrl];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]];
[request setHTTPMethod:@"POST"];
[request setCachePolicy:NSURLRequestReloadIgnoringCacheData];
[request setTimeoutInterval:15.f];
//必須要寫boundary=,不然報錯
NSString *content = [[NSString alloc]initWithFormat:@"multipart/form-data; boundary=%@", UploadImageBoundary];
[request setValue:content forHTTPHeaderField:@"Content-Type"];
//設(shè)置token
[request setValue:gloginManager.token forHTTPHeaderField:@"apptoken"];
//配置host
if ([ServerConfigManager currentUsedServerType] == ServerType_CUSTOM_IP) {
[request setValue:@"btr.m.jd.com" forHTTPHeaderField:@"host"];
}
NSMutableData *requestMutableData = [NSMutableData data];
NSMutableString *myString = [NSMutableString stringWithFormat:@"--%@\r\n", UploadImageBoundary];
[myString appendString:@"Content-Disposition: form-data; name=\"file\"; filename=\"1.jpg\"\r\n"];
[myString appendString:@"Content-Type: image/jpg\r\n\r\n"];
/*轉(zhuǎn)化為二進制數(shù)據(jù)*/
[requestMutableData appendData:[myString dataUsingEncoding:NSUTF8StringEncoding]];
/*文件數(shù)據(jù)部分,也是二進制*/
[requestMutableData appendData:imageData];
/*已--boundary結(jié)尾表明結(jié)束*/
[requestMutableData appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", UploadImageBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
request.HTTPBody = requestMutableData;
/*開始上傳*/
NSURLSessionDataTask *uploadtask = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
//請求回調(diào)
NSString *jsonStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
DLog(@"finished===========%@", jsonStr);
NSDictionary *dictionary = [LJUtils toArrayOrDictionaryFromJSONString:jsonStr];
dispatch_async(dispatch_get_main_queue(), ^{
callback(YES, dictionary, nil);
});
}];
[uploadtask resume];