客户端图片批量上传的处理方法(AFN3.0)

批量上传图片的需求

在开发中我们常常遇到图片多张上传的这样的产品需求,而AFN在更新3.0~3.x之后不再提供批量上传的方法,本文提供的是基于GCD队列的方法进行批量上传图片提供每张图片的上传进度的监控.

封装图片上传的方法

/**批量上传图片*/
+ (NSURLSessionUploadTask*)uploadTaskWithImage:(UIImage*)image completion:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionBlock {
    // 构造 NSURLRequest
    NSError* error = NULL;
    NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:[NSString stringWithFormat:@"%@%@",JHTestUrl,JHPostImageFileURL] parameters:nil constructingBodyWithBlock:^(id formData) {
        NSData* imageData = UIImageJPEGRepresentation(image, 1.0);
        [formData appendPartWithFileData:imageData name:@"file1" fileName:@"someFileName.png" mimeType:@"image/png"];
    } error:&error];
    // 将 NSURLRequest 与 completionBlock 包装为 NSURLSessionUploadTask
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:^(NSProgress * _Nonnull uploadProgress) {
    } completionHandler:completionBlock];
    return uploadTask;
}

GCD方法监听每张图片的上传进度

/**
 *  批量上传图片的处理方法(GCD)
 *
 *  @param images     要上传的图片数组
 *  @param completion 上传完成之后的正确返回路径
 */
+(void)uploadImagesWithImages:(NSArray *)images completion:(void(^)(NSMutableArray *successResultPath))completion{
    // 准备保存结果的数组,元素个数与上传的图片个数相同,先用 NSNull 占位
    NSMutableArray* result = [NSMutableArray array];
    for (NSInteger i = 0; i

你可能感兴趣的:(客户端图片批量上传的处理方法(AFN3.0))