【问题标题】:NSURLSessionUploadTask originalRequest httpBody is NullNSURLSessionUploadTask originalRequest httpBody 为 Null
【发布时间】:2016-10-06 19:31:33
【问题描述】:

我正在使用NSURLSessionUploadTask 上传图片。

上传成功。图片已成功发布到我的服务器。

这是被调用的方法创建一个新的NSURLSessionUploadTaskNSDataNSData 格式的图像,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 与传递图像的已知 NSData 进行比较来做到这一点。

但是,当调用上述方法时,[task.originalRequest HTTPBody]NULL

有谁知道为什么那会是空的?

【问题讨论】:

  • 你为什么不检查 [task.originalRequest URL] ?
  • 如果我同时进行多个上传,URL 会不会相同?此外,每个唯一的独特之处是 NSData。方法应该将 NSData 传递给方法,但它没有。
  • 好的,所以所有上传都到同一个服务器,URL 没有任何变化。可能应该提到这个问题。

标签: objective-c nsurlsession nsurlsessiondatatask nsurlsessionuploadtask


【解决方案1】:

您可以将NSSessionUploadTask 子类化并拥有一个与之关联的标识符。

@interface NSSessionUploadTaskId : NSObject {
   NSUInteger taskIdentifier;
}

NSURLSessionTask 也有 taskIdentifier property,但我不知道如何使用它。

@property(readonly) NSUInteger taskIdentifier;

标识符在给定会话中唯一标识任务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    相关资源
    最近更新 更多