0

我需要实现一个子类,NSOperation该子类将文件上传到 HTTP 服务器,并且用户可以在操作期间取消文件上传。

这是目前的代码:

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。

如果我不理解你(并且有一些复杂的问题,但我不这么认为),你有两个解决方案。

  1. 创建那个子类,然后创建一个 NSOperationQueue 的实例,将该子类的一个实例添加到队列中。

  2. 使用 AFNetworking 或 MKNetworkKit(MKNetworkKit 使用 NSOperation 和 NSOperationQueue)

于 2012-08-16T16:35:03.607 回答