nsurlsessionuploadtask多图片上传

NSURLSessionUploadTask多图片上传

使用NSURLSessionUploadTask实现多图片上传, 图片N张, 参数字典一个,代码如下:
typedef void (^SuccessBlock) (id responder);
typedef void (^ErrorBlock) (id errorCode);

#define Kboundary @”—-anycharisok”

#define kDictIsEmpty(dic) (dic == nil || [dic isKindOfClass:[NSNull class]] || dic.allKeys == 0)

  • (void)CRPOSTUploadtWithRequestUrl:(NSString )urlStr
    withParameter:(NSDictionary
    )parameter
    withImageArray:(NSArray )imageArray
    WithReturnValueBlock:(SuccessBlock)successBlock
    errorCodeBlock:(ErrorBlock)errorBlock {
    NSURLSession
    session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:nil delegateQueue:[NSOperationQueue mainQueue]];
    NSMutableURLRequest request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]];
    NSString
    headerStr = [NSString stringWithFormat:@”multipart/form-data;boundary=%@”,Kboundary];
    [request setValue:headerStr forHTTPHeaderField:@”Content-Type”];
    [request setHTTPMethod:@”POST”];
    [request setCachePolicy:NSURLRequestReloadIgnoringCacheData];
    [request setTimeoutInterval:20];
    NSData data = [self getBodyDataWithParameter:parameter WithArray:imageArray];
    NSURLSessionUploadTask
    uploadTask = [session uploadTaskWithRequest:request fromData:data completionHandler:^(NSData data, NSURLResponse response, NSError error) {
    if (!error && response != nil) {
    NSDictionary
    dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
    if (!kDictIsEmpty(dict)) {
    dispatch_async(dispatch_get_main_queue(), ^{
    successBlock(dict);
    });
    }
    }else{
    dispatch_async(dispatch_get_main_queue(), ^{
    errorBlock(error);
    });
    }
    }];
    [uploadTask resume];
    }

  • (NSData )getBodyDataWithParameter:(NSDictionary )parameter WithArray:(NSArray )imageArray {
    NSMutableData
    myData = [NSMutableData data];
    NSMutableString body=[[NSMutableString alloc]init];
    [body appendFormat:@”–%@rn”,Kboundary];
    [body appendFormat:@”Content-Disposition: form-data; name=%@rnrn”,@”inputStr”];
    NSData
    bodyData = [NSJSONSerialization dataWithJSONObject:parameter options:NSJSONWritingPrettyPrinted error:nil];
    NSString *cargos = [[NSString alloc] initWithData:bodyData encoding:NSUTF8StringEncoding];
    [body appendFormat:@”%@”,cargos];
    [body appendFormat:@”rn”];
    [myData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]];

for (int i = 0; i < imageArray.count; i++) {
NSMutableString imgbody = [[NSMutableString alloc] init];
[imgbody appendFormat:@”–%@rn”,Kboundary];
[imgbody appendFormat:@”Content-Disposition: form-data; name=”file%d”; filename=”%@.png”rn”,i,[self uuidString]];
[imgbody appendFormat:@”Content-Type: image/png; charset=utf-8rnrn”];
[myData appendData:[imgbody dataUsingEncoding:NSUTF8StringEncoding]];
NSData
data = [NSData data];
data = UIImageJPEGRepresentation(imageArray[i], 1.0f);
NSString base64Encoded = [data base64EncodedStringWithOptions:0];
NSData
dataBase64String = [[NSData alloc] initWithBase64EncodedString:base64Encoded options:0];
[myData appendData:dataBase64String];
[myData appendData:[@”rn” dataUsingEncoding:NSUTF8StringEncoding]];
}
[myData appendData:[[NSString stringWithFormat:@”–%@–rn”,Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];
return [myData copy];
}