-->

Issue while uploading Image

2019-05-26 05:25发布

问题:

Step 1: here I am creating the Request

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"];

Step 2: here I am creating the Stream at given Location

[[AFHTTPRequestSerializer serializer] requestWithMultipartFormRequest:request1 
                                          writingStreamContentsToFile:[NSURL fileURLWithPath:[strImagePath stringByDeletingPathExtension]] 
                                                    completionHandler:^(NSError *error){

Step 3: here I am creating uploading task.

        ///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 : %@\n\n responseObject : %@\n\n error : %@", response, responseObject, error);

                                                               }];
        [uploadTask resume];
    }
                                                    }];
}

My problem is before application going to background mode I want to write all the request HTTPBody(HTTPStream) at given location with using Step:1 and Step:2 and save all the request into the NSArray after writing all the HTTPStream in File(in application Foreground) mean while I'll show Image prepare to upload.

then I'll start creating background task with the help of Step3: with passing request into this which request I have stored into the NSArray. with this approach I am not able to upload images.

But If I call all the steps together one by one then it will upload the image on the server, but with this approach my application should be in Foreground for create request because we need to write the HTTPBody at give location.

Please help me to come out this problem I am stuck on this from last 2 week. My application needed more then 500 images uploading over the server.

回答1:

try like this

 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];


回答2:

I have done with this task, create all the upload task without resume them and save every task within the NSArray after creation. Once all the task are created then call a method in which we resume all the tasks.