0

이미지를 업로드하는 데 NSURLSessionUploadTask을 사용하고 있습니다.NSURLSessionUploadTask originalRequest httpBody가 Null입니다.

업로드가 작동합니다. 이미지가 내 서버에 성공적으로 게시됩니다.

이 메서드는 새로운 NSURLSessionUploadTask을 만듭니다. NSDataNSData 형식의 이미지이고 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); 

} 

그러나 여러 개의 업로드가있는 경우 어떤 업로드가 올바른 진행 상태인지 확인할 수 있어야합니다. 전달한 이미지의 알려진 NSData과 함께 작업 (원래의 NSData)을 비교하여이 작업을 수행 할 수 있다고 생각합니다.

그러나, 위의 메서드를 호출 할 때, [task.originalRequest HTTPBody]NULL입니다

즉 null가 왜

사람이 알고 있나요?

+0

[task.originalRequest URL]을 선택하지 않는 이유는 무엇입니까? – PnotNP

+0

동시에 여러 번 업로드하는 경우 URL이 동일하지 않습니까? 게다가 각각에 대한 유일한 점은 NSData뿐입니다. 메서드 *는 NSData를 메서드에 전달해야하지만 그렇지 않습니다. –

+0

좋아, 모든 업로드는 URL을 변경하지 않고 동일한 서버에 있습니다. 아마 그 질문에 언급해야합니다. – PnotNP

답변

0

NSSessionUploadTask의 하위 클래스를 만들고 식별자를 할당 할 수 있습니다.

@interface NSSessionUploadTaskId : NSObject { 
    NSUInteger taskIdentifier; 
} 

NSURLSessionTasktaskIdentifier property 가지고 있지만 나는 그것을 사용하는 방법을 모르겠어요.

@property(readonly) NSUInteger taskIdentifier;

는 식별자가 고유하게 주어진 세션 내에서 작업을 식별합니다.