0

HTTP サーバーにファイルをアップロードするサブクラスを実装する必要がありNSOperation、操作中にユーザーがファイルのアップロードをキャンセルできるオプションを使用します。

現時点でのコードは次のとおりです。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *documentsDirectory = [paths objectAtIndex:0];
  NSString *imagePath = [documentsDirectory stringByAppendingPathComponent:filename];

  NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];

  [request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
  [request setHTTPShouldHandleCookies:NO];
  [request setTimeoutInterval:20];
  [request setHTTPMethod:@"POST"];

  NSString *boundary = @"------WebKitFormBoundary4QuqLuM1cE5lMwCy";

  NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
  [request setValue:contentType forHTTPHeaderField: @"Content-Type"];

  NSMutableData *body = [NSMutableData data];
  NSString *FileParamConstant = @"uploadFile";
  NSData *imageData = [[NSData alloc] initWithContentsOfFile:imagePath];

  NSMutableDictionary *parameters = [[NSMutableDictionary alloc] initWithCapacity:11];
  [parameters setValue:@"Value" forKey:@"Server_required_param"];

  NSString *urlString = @"http://www.omeuendereco/uploadFile.php";   

  for (NSString *param in parameters) {

      [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
      [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", FileParamConstant, filename] dataUsingEncoding:NSUTF8StringEncoding]];
      [body appendData:[[NSString stringWithString:@"Content-Type: image/jpeg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
      [body appendData:imageData];
      [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
  }

  [body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

  [request setHTTPBody:body];
  [request setURL:[NSURL URLWithString:urlString]];

  NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
                                                                delegate:up
                                                        startImmediately:YES]; 

  [connection start];

問題は、このコードに NSOperationqueue を実装する必要があり、その方法がわからないことです。次に、NSOperation のサブクラスを使用して、アップロード操作をキャンセルできます。

4

1 に答える 1

-1

あなたの問題は何ですか?サブクラスの作成方法がわからない場合は、Objective-C を学んでください。

私があなたを理解していない場合 (そして、洗練された問題がいくつかありますが、私はそうは思いません)、2 つの解決策があります。

  1. CREATE THAT SUBCLASS を作成してから NSOperationQueue のインスタンスを作成し、そのサブクラスのインスタンスをキューに追加します。

  2. AFNetworking または MKNetworkKit を使用します (MKNetworkKit は NSOperation および NSOperationQueue を使用します)。

于 2012-08-16T16:35:03.607 に答える