NSURLSessionUploadTask多图片上传

来源:互联网 发布:淘宝客服的链接在哪里 编辑:程序博客网 时间:2024/06/05 19:24

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 <UIImage *>*)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 <UIImage *>*)imageArray {    NSMutableData *myData = [NSMutableData data];    NSMutableString *body=[[NSMutableString alloc]init];    [body appendFormat:@"--%@\r\n",Kboundary];    [body appendFormat:@"Content-Disposition: form-data; name=%@\r\n\r\n",@"inputStr"];    NSData *bodyData = [NSJSONSerialization dataWithJSONObject:parameter options:NSJSONWritingPrettyPrinted error:nil];    NSString *cargos = [[NSString alloc] initWithData:bodyData encoding:NSUTF8StringEncoding];    [body appendFormat:@"%@",cargos];    [body appendFormat:@"\r\n"];    [myData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]];    for (int i = 0; i < imageArray.count; i++) {        NSMutableString *imgbody = [[NSMutableString alloc] init];        [imgbody appendFormat:@"--%@\r\n",Kboundary];        [imgbody appendFormat:@"Content-Disposition: form-data; name=\"file%d\"; filename=\"%@.png\"\r\n",i,[self uuidString]];        [imgbody appendFormat:@"Content-Type: image/png; charset=utf-8\r\n\r\n"];        [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:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];    }    [myData appendData:[[NSString stringWithFormat:@"--%@--\r\n",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];    return [myData copy];}

详细注释查看参考博客

0 0
原创粉丝点击