I am relatively new to AFNetworking 2.0. Using the code snippet below, I've been able to successfully upload a photo to my url. I would like to track the incremental upload progress, but I cannot find an example of doing this with version 2.0. My application is iOS 7, so I've opted for AFHTTPSessionManager.
Can anyone offer an example of how to modify this snippet to track upload progress?
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"myimage.jpg"], 1.0);
[manager POST:@"http://myurl.com" parameters:dataToPost constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:imageData name:@"attachment" fileName:@"myimage.jpg" mimeType:@"image/jpeg"];
} success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"Success %@", responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"Failure %@, %@", error, [task.response description]);
}];
The interface of
AFHTTPSession
doesn't provide a method to set a progress block. Instead, you'll have to do the following:In addition, you don't have to read the image via
UIImage
and then compress it again using JPEG to get anNSData
. Just use+[NSData dataWithContentsOfFile:]
to read the file directly from your bundle.It's true the interface of
AFHTTPSessionManager
doesn't provide a method to track the upload progress. But theAFURLSessionManager
does.As a inherited class of
AFURLSessionManager
AFHTTPSessionManager
can track upload progress like this:outside
Here is method 2(updated)
use
KVO
to track progress meansself
need to be alive during observation. The more elegant way isAFURLSessionManager
's methodsetTaskDidSendBodyDataBlock
, like this: