我封裝的使用AFNetworking上傳多圖的一個方法。帶進度條回調(diào),希望對你用幫助,我app中親測可用,不知道你的服務器是如何接收數(shù)據(jù)的:
聲明:
/**
*??上傳帶圖片的內(nèi)容,允許多張圖片上傳(URL)POST
*
*??@param url???????????????? 網(wǎng)絡請求地址
*??@param images??????????????要上傳的圖片數(shù)組(注意數(shù)組內(nèi)容需是圖片)
*??@param parameter?????????? 圖片數(shù)組對應的參數(shù)
*??@param parameters??????????其他參數(shù)字典
*??@param ratio?????????????? 圖片的壓縮比例(0.0~1.0之間)
*??@param succeedBlock????????成功的回調(diào)
*??@param failedBlock???????? 失敗的回調(diào)
*??@param uploadProgressBlock 上傳進度的回調(diào)
*/
+(void)startMultiPartUploadTaskWithURL:(NSString *)url
imagesArray:(NSArray *)images
parameterOfimages:(NSString *)parameter
parametersDict:(NSDictionary *)parameters
compressionRatio:(float)ratio
succeedBlock:(void(^)(id operation, id responseObject))succeedBlock
failedBlock:(void(^)(id operation, NSError *error))failedBlock
uploadProgressBlock:(void(^)(float uploadPercent,long long totalBytesWritten,long long totalBytesExpectedToWrite))uploadProgressBlock;
實現(xiàn):
+(void)startMultiPartUploadTaskWithURL:(NSString *)url
imagesArray:(NSArray *)images
parameterOfimages:(NSString *)parameter
parametersDict:(NSDictionary *)parameters
compressionRatio:(float)ratio
succeedBlock:(void (^)(id, id))succeedBlock
failedBlock:(void (^)(id, NSError *))failedBlock
uploadProgressBlock:(void (^)(float, long long, long long))uploadProgressBlock{
if (images.count == 0) {
NSLog(@"上傳內(nèi)容沒有包含圖片");
return;
}
for (int i = 0; i < images.count; i++) {
if (![imagesisKindOfClass:[UIImage class]]) {
NSLog(@"images中第%d個元素不是UIImage對象",i+1);
return;
}
}
AFHTTPRequestOperation *operation = [[self sharedOperation].operationManager POST:url parameters:parameters constructingBodyWithBlock:^(id formData) {
int i = 0;
//根據(jù)當前系統(tǒng)時間生成圖片名稱
NSDate *date = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy年MM月dd日"];
NSString *dateString = [formatter stringFromDate:date];
for (UIImage *image in images) {
NSString *fileName = [NSString stringWithFormat:@"%@%d.png",dateString,i];
NSData *imageData;
if (ratio > 0.0f && ratio < 1.0f) {
imageData = UIImageJPEGRepresentation(image, ratio);
}else{
imageData = UIImageJPEGRepresentation(image, 1.0f);
}
[formData appendPartWithFileData:imageData name:parameter fileName:fileName mimeType:@"image/jpg/png/jpeg"];
}
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
succeedBlock(operation,responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@",error);
failedBlock(operation,error);
}];
[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
CGFloat percent = totalBytesWritten * 1.0 / totalBytesExpectedToWrite;
uploadProgressBlock(percent,totalBytesWritten,totalBytesExpectedToWrite);
}];
}