使用AFNetworking上传多个图像

我使用PickerController并将一些图像加载到NSMutableArray

现在我需要一次上传所有这些图像。 我正在使用AFNetworking ,我该怎么做?

我浏览了AFNetworking文档,其中有一个部分叫做Creating an Upload Task for a Multi-Part Request, with Progress 。 但是,我无法上传我的NSMutableArray的图像。

****注意:我想上传NSMutableArray的图像作为字节数组。 我怎样才能做到这一点? ****

我到目前为止的代码

 NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; NSURL *URL = [NSURL URLWithString:@"site.com/upload"]; NSURLRequest *request = [NSURLRequest requestWithURL:URL]; 

 UIImage *image1 = [UIImage imageNamed:@"about_app"]; UIImage *image2 = [UIImage imageNamed:@"alter"]; NSArray *array = @[image1,image2]; NSMutableURLRequest *request = [[AFNetWorkSingleton shareInstance] multipartFormRequestWithMethod:@"POST" path:@"Mindex/getimg" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>formData){ int i = 0; for(UIImage *eachImage in array) { NSData *imageData = UIImageJPEGRepresentation(eachImage,0.5); [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"file%d",i ] fileName:[NSString stringWithFormat:@"file%d.jpg",i ] mimeType:@"image/jpeg"]; i++; } }]; 

尝试这个。

 -(void)uploadImages{ // image.finalImage - is image itself // totalCount - Total number of images need to upload on server AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; NSDictionary *parameters = @{@"Key":@"Value",@"Key":@"Value"}; [manager POST:serverURL parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithFileData:UIImagePNGRepresentation(image.finalImage) name:@"ImageName" fileName:[[Helper getRandomString:8] stringByAppendingString:@".png"] mimeType:@"image/png"]; } success:^(AFHTTPRequestOperation *operation, id responseObject) { NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:(NSData *)responseObject options:kNilOptions error:nil]; _uploadCounter+=1; if(_uploadCounter<totalCount){ [self uploadImages]; }else { NSLog(@"Uploading all images done"); } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error"); }]; 

}

试试这个,我已经上传了10个图像在服务器上使用这个代码,并成功上传服务器。

Swift 3:
Alamofire是相当好的来源/图书馆:

 Alamofire.upload( multipartFormData: { multipartFormData in multipartFormData.append(unicornImageURL, withName: "unicorn") multipartFormData.append(rainbowImageURL, withName: "rainbow") }, to: "https://httpbin.org/post", encodingCompletion: { encodingResult in switch encodingResult { case .success(let upload, _, _): upload.responseJSON { response in debugPrint(response) } case .failure(let encodingError): print(encodingError) } } ) 

UIImage转换为NSData的常用技巧是使用以下两种方法之一。

 NSData *pngData = UIImagePNGRepresentation(myUIImage); CGFloat quality = 1.0; // ranges from 0 to 1, 0% to 100% NSData *jpgData = UIImageJPEGRepresentation(myUIImage, quality); 

这当然假设你知道你的图像是哪种types。 但是由于您使用PickerController来获取图像,因此确定这一点应该相当容易。 您只需将UIImagePickerControllerReferenceURL键下的值取出并检查ext参数。 这个评论显示了它的视觉https://stackoverflow.com/a/11506499/1529638

如果你想上传多个图像,你想保持参数名称相同的所有图像,你做如下:

 NSDictionary *parameters = @{@"user_key": @"*****"}; NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:queryStringss parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { NSError *error; [formData appendPartWithFileData:imageData name:@"photo_file[0]" fileName:@"Picture44.png" mimeType:@"image/png"]; [formData appendPartWithFileData:imageData1 name:@"photo_file[1]" fileName:@"Picture45.png" mimeType:@"image/png"]; } error:nil]; 

通过这种方式,文件将作为数组发送到服务器。