0

私はNSURLSessionUploadTaskを使って画像をアップロードしています。NSURLSessionUploadTask originalRequest httpBody is 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); 

} 

ただし、複数のアップロードがある場合は、どのアップロードが正しい進行状況であるかを確認する必要があります。私はあなたがtask.originalRequest NSDataと、渡されたImageの既知のNSDataを比較することでこれを行うことができるように感じています。

しかし、上記のメソッドが呼び出されたときに、[task.originalRequest HTTPBody]NULLである

それがnullになる理由

は誰もが知っていますか?

+0

[task.originalRequest URL]を確認してください。 – PnotNP

+0

複数のアップロードが同時に行われている場合、URLは同じではないでしょうか?さらに、それぞれについてのユニークなことは、NSDataだけです。メソッド*は、メソッドにNSDataを渡す必要がありますが、NSDataをメソッドに渡す必要があります。 –

+0

これですべてのアップロードはURLを変更することなく同じサーバーになります。おそらくそれは言及すべきである。 – PnotNP

答えて

0

NSSessionUploadTaskをサブクラス化して、それに付随する識別子を付けることができます。

@interface NSSessionUploadTaskId : NSObject { 
    NSUInteger taskIdentifier; 
} 

NSURLSessionTasktaskIdentifier propertyを持っていますが、私はそれを使用するかどうかはわかりません。

@property(readonly) NSUInteger taskIdentifier;

識別子一意に与えられたセッション内でタスクを識別する。