在写需求的时候,在AFN中找了很久都没有找到多图片上传的相关功能,但最后还是发现了利用参数拼接的原理,可以做多图片、带参数的上传。
话不多说,上代码:
- (void)uploadImageDictionary:(NSDictionary *)imageDictionary URLString:(NSString *)URLString parameters:(id)parameters finished:(HHRequestCallBack)finished { [self POST:URLString parameters:parameter constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { NSArray *keyArray = imageDictionary.allKeys; for (int i = 0; i<imageDictionary.count; i++) { NSString *fileName = [NSString stringWithFormat:@"%@.jpeg", keyArray[i]]; NSData *imageData = [HHCommon provdeImage: imageDictionary[keyArray[i]]]; [formData appendPartWithFileData:imageData name:keyArray[i] fileName:fileName mimeType:@"image/jpeg"]; } } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { finished(responseObject, nil); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"网络请求错误 %@", error.localizedDescription); finished(nil, error); }]; }
+ (NSData *)provdeImage:(UIImage *)image { NSData * imageData = UIImageJPEGRepresentation(image,1); CGFloat length = [imageData length]/1024; if (length > 1000) { return UIImageJPEGRepresentation(image,0.1); } return imageData; }
参数:imageDictionary key 为图片的参数key value 为图片
URLString 请求地址
parameters 参数字典
finished 回调block
第一个方法主要是一个对AFN的一个封装,在里面运用一个for循环遍历参数和值组成的字典,再拼接到请求里面。注意的是,这里我用的是图片,所以在拼接的时候用了
- (void)appendPartWithFileData:(NSData *)data name:(NSString *)name fileName:(NSString *)fileName mimeType:(NSString *)mimeType
这个方法。这个主要好处就是可以对图片进行处理(第二个方法就是对图片进行压缩)。但是如果你不需要对图片进行处理,那么可以用这个方法
- (BOOL)appendPartWithFileURL:(NSURL *)fileURL name:(NSString *)name fileName:(NSString *)fileName mimeType:(NSString *)mimeType error:(NSError * __autoreleasing *)error那么相应的你需要把 imageDictionary 的值换成图片的资源地址。