我正在使用NSURLSessionUploadTask
上传图片。
上传有效。图像已成功发布到我的服务器。
这是被称为创建新NSURLSessionUploadTask
的方法。 NSData
是NSData
格式的图片,withPostRequest:
是NSMutableRequest
,其中包含所有垃圾。
- (void) uploadImage:(NSData*)data withPostRequest:(NSMutableURLRequest*)postRequest {
NSURLSessionUploadTask * uploadTask = [_session uploadTaskWithRequest:postRequest fromData:data completionHandler:^(NSData *data,NSURLResponse *response,NSError *error) {
//MAIN THREAD ACCESS UPDATE TO THE GUI OR DISPLAY ERRORS
dispatch_async(dispatch_get_main_queue(), ^{
//UPDATE THE GUI ON COMPLETION
});
}];
// START THE TASK
[uploadTask resume];
}
通过上传调用此委托方法以显示进度。这个方法在发送成功字节时被调用。
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didSendBodyData:(int64_t)bytesSent totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend {
NSData * taskData = [task.originalRequest HTTPBody];
NSLog(@"Task Data: %@", taskData);
}
但是,如果我有多个上传,我需要能够检查哪个上传有正确的进度。我觉得你可以通过比较task.originalRequest NSData
和传递的Image的已知NSData
来做到这一点。
但是,当调用上述方法时,[task.originalRequest HTTPBody]
NULL
有谁知道为什么会是null?
答案 0 :(得分:0)
您可以对NSSessionUploadTask
进行子类化,并使用与之关联的标识符。
@interface NSSessionUploadTaskId : NSObject {
NSUInteger taskIdentifier;
}
NSURLSessionTask
也有taskIdentifier
property,但我不确定如何使用它。
@property(readonly) NSUInteger taskIdentifier;
标识符唯一标识给定会话中的任务。