第一步:在这里我创建请求
NSMutableURLRequest *request1 = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST"
URLString:[NSString stringWithFormat:@"%@%@", API_MAIN_URL, IMAGE_UPLOAD]
parameters:param constructingBodyWithBlock:^(id formData) {
[formData appendPartWithFileURL:[NSURL fileURLWithPath:strImagePath]
name:@"sendimage"
fileName:[strImagePath lastPathComponent]
mimeType:@"image/png"
error:nil];
} error:nil];
[request1 setValue:authToken forHTTPHeaderField:@"Authorization"];
步骤2:这里我在给定位置创建流
[[AFHTTPRequestSerializer serializer] requestWithMultipartFormRequest:request1
writingStreamContentsToFile:[NSURL fileURLWithPath:[strImagePath stringByDeletingPathExtension]]
completionHandler:^(NSError *error){
步骤3:这里我正在创建上传任务。
///here is file
NSProgress *progress = nil;
NSURLSessionUploadTask *uploadTask = [self.manager uploadTaskWithRequest:request1
fromFile:[NSURL fileURLWithPath:strImagePath]
progress:&progress
completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
NSLog(@"response : %@nn responseObject : %@nn error : %@", response, responseObject, error);
}];
[uploadTask resume];
}
}];
}
我的问题是在应用程序进入后台模式之前,我想在给定位置使用步骤:1和步骤:2编写所有请求HTTPBody
(HTTPStream),并在文件(在应用程序前台)中写入所有HTTPStream
后将所有请求保存到NSArray
中,同时我会显示图像准备上传。
然后我将在Step3的帮助下开始创建后台任务:将请求传递到我已存储在NSArray
中的请求。使用这种方法,我无法上传图像。
但是如果我一个接一个地调用所有步骤,那么它将在服务器上上传图像,但是使用这种方法,我的应用程序应该在前台创建请求,因为我们需要在给定位置编写HTTPBody
。
请帮助我解决这个问题,我被困在这个从过去的两个星期。我的应用程序需要在服务器上上传超过500张图片。
试试
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil];
} error:nil];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSProgress *progress = nil;
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
} else {
NSLog(@"%@ %@", response, responseObject);
}
}];
[uploadTask resume];
我已经完成了这个任务,创建所有的上传任务而不恢复它们,并在创建后将每个任务保存在NSArray中。一旦所有的任务都被创建,然后调用一个方法来恢复所有的任务。