[英]AFNetworking Upload multiple files in sequence
我想按順序上傳文件。 要上載到服務器,然后上載第二個,依此類推。 當我運行以下代碼時,所有文件似乎都立即被加載。 另外,我無法跟蹤MBHudProgress中的進度。
我能以某種方式做到這一點,以便從文件加載器得到一個響應,即上一個文件已加載,我能否加載下一個文件?
for (id item in imagesArray) {
NSLog(@"item %@", item);
NSData *imageData = UIImagePNGRepresentation(item);
NSString *urlUpload = @"https://domain/api/wp-json/wp/v2/media?access_token=";
urlUpload = [urlUpload stringByAppendingString:[Lockbox unarchiveObjectForKey:@"access_token"]];
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeAnnularDeterminate;
hud.label.text = @"Uploaded photo";
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:urlUpload parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:imageData name:@"file" fileName:@"filename.png" mimeType:@"image/png"];
} error:nil];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSURLSessionUploadTask *uploadTask;
uploadTask = [manager
uploadTaskWithStreamedRequest:request
progress:^(NSProgress * _Nonnull uploadProgress) {
dispatch_async(dispatch_get_main_queue(), ^{
hud.progress = uploadProgress.fractionCompleted;
});
}
completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
[hud hideAnimated:YES];
if (error) {
NSLog(@"Error: %@", error);
} else {
NSLog(@"%@ %@", response, responseObject);
if ([responseObject objectForKey:@"id"] == nil ||
[[responseObject objectForKey:@"id"] isEqual:[NSNull null]] ||
[responseObject objectForKey:@"id"] == [NSNull null]) {
NSLog(@"NO ID %@", responseObject);
} else {
NSLog(@"ID: %@", [responseObject objectForKey:@"id"]);
NSLog(@"source_url: %@", [responseObject objectForKey:@"source_url"]);
}
}
}];
[uploadTask resume];
}
據我了解,您想一張一張地上傳圖片。 上傳第一張圖片后,開始上傳下一張圖片。
我認為,在這種情況下可以使用遞歸。 看下面我的代碼。
// Use recursive to upload an array items
- (void)startUploadItems:(NSMutableArray*)items {
if (items.count < 1) {
return;
}
[self startUploadItem:items[0] completion:^(BOOL success) {
[items removeObjectAtIndex:0];
[self startUploadItems:items];
}];
}
// Use to upload a single item.
- (void)startUploadItem:(id)item completion:(void(^)(BOOL success))completion {
NSLog(@"item %@", item);
NSData *imageData = UIImagePNGRepresentation(item);
NSString *urlUpload = @"https://domain/api/wp-json/wp/v2/media?access_token=";
urlUpload = [urlUpload stringByAppendingString:[Lockbox unarchiveObjectForKey:@"access_token"]];
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeAnnularDeterminate;
hud.label.text = @"Uploaded photo";
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:urlUpload parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:imageData name:@"file" fileName:@"filename.png" mimeType:@"image/png"];
} error:nil];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSURLSessionUploadTask *uploadTask;
uploadTask = [manager
uploadTaskWithStreamedRequest:request
progress:^(NSProgress * _Nonnull uploadProgress) {
dispatch_async(dispatch_get_main_queue(), ^{
hud.progress = uploadProgress.fractionCompleted;
});
}
completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
[hud hideAnimated:YES];
if (error) {
NSLog(@"Error: %@", error);
} else {
NSLog(@"%@ %@", response, responseObject);
if ([responseObject objectForKey:@"id"] == nil ||
[[responseObject objectForKey:@"id"] isEqual:[NSNull null]] ||
[responseObject objectForKey:@"id"] == [NSNull null]) {
NSLog(@"NO ID %@", responseObject);
} else {
NSLog(@"ID: %@", [responseObject objectForKey:@"id"]);
NSLog(@"source_url: %@", [responseObject objectForKey:@"source_url"]);
}
}
if (completion) {
completion(!error);
}
}];
[uploadTask resume];
}
用法:
[self startUploadItems:imagesArray];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.