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
- NSURLSessionUploadTask多图片上传
- NSURLSessionUploadTask 上传图片
- NSURLSessionUploadTask 上传
- NSURLSessionUploadTask(上传任务)
- 使用NSURLSession,NSURLSessionUploadTask上传文件
- IOS开发Swift使用NSURLSessionUploadTask实现后台上传功能
- 多图片上传
- webwork 多图片上传
- Struts 多图片上传
- 多图片上传实现
- ASP 多图片上传
- 多图片上传
- 多张图片上传
- 多图片上传
- xutils上传多图片
- Yii多图片上传
- uploadify上传多图片
- iOS多图片上传
- SpringBoot 学习记录(三): jpa
- Spring Boot 集成MyBatis
- java future
- WPF实战之DataGrid 单元格如何默认单击一次点中
- 图像的归一化互信息Normlized Mutual Information
- NSURLSessionUploadTask多图片上传
- 【JS】:如何不下载jQuery而通过分发网络引用它
- 关于级联分类器学习
- java 使用mysql --- jdbc链接示例
- div中只显示2行文字超出隐藏
- Android studio 如何查看 library 间的依赖关系
- 使用DanmakuFlameMaster实现弹幕效果
- Android开发之Socket编程以及注意事项
- tensorflow的共享变量,tf.Variable(),tf.get_variable(),tf.Variable_scope(),tf.name_scope()联系与区别: