2016-11-07 83 views
1

这是我的 “M发送请求:如何发送键参数AFMultipartFormData AFNetworking 3

NSString *string = [NSString stringWithFormat:@"%@/API/Upload",BaseURLString]; 
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
    [manager setRequestSerializer:[AFHTTPRequestSerializer serializer]]; 
    [manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; 
    NSError *error; 
manager.responseSerializer.acceptableContentTypes = nil; 
for(NSData *eachImage in self.fetchedAtt) { 
NSString *mystring = @"786"; 
     NSURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:string parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
[formData appendPartWithFormData:eachImage name:@"myImage"]; 
      [formData appendPartWithFormData:[mystring dataUsingEncoding:NSUTF8StringEncoding] 
             name:@"PracticeCode"]; 
} error:&error]; 

     NSURLSessionDataTask *task = [manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { 
      if (error) { 
       NSLog(@"%@", error.localizedDescription); 
       return; 
      } 

      NSLog(@"%@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]); 
     }]; 
     [task resume]; 
    } 
} 

有时候我:

{ ”消息“:” 错误写入MIME多域主体部分的输出 流。”}

//这是一个500错误 有时我得到

请求失败:不支持的媒体类型(415)

+0

追加这一个是参数mystring –

+0

@ Anbu.Karthik抱歉,我没有得到你所说的? –

回答

1

您正试图在一个单一的多种形式的请求发送多个文件。 Multipart不能像这样工作。您将不得不一次使用一个文件进行多个多部分请求。所以考虑你有20个文件。您将创建一次执行一个文件的异步任务,上载该文件,然后再次为下一个文件执行相同的功能。

如果要保留引用,则应从后端返回文件ID,然后将所有ID添加到单个数组中,并将该数组作为param发送到单独的api请求中以将文件与任何物体。希望这是有道理的。

0

试试这个Afnetworking 3.0

NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString: [NSString stringWithFormat:@"%@/API/Upload",BaseURLString]; parameters:@{@"text":@"name"} constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 

     [formData appendPartWithFileData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageurl]] name:@"bizcard" fileName:@"Businesscard.jpg" mimeType:@"image/jpeg"]; // you file to upload 
     } error:nil]; 

    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 
    manager.responseSerializer = [AFJSONResponseSerializer serializer]; 

    NSURLSessionUploadTask *uploadTask; 
    uploadTask = [manager 
        uploadTaskWithStreamedRequest:request 
        progress:^(NSProgress * _Nonnull uploadProgress) { 
         dispatch_async(dispatch_get_main_queue(), ^{ 
         }); 
        } 
        completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { 
         if (error) { 
          NSLog(@"Error: %@", [[NSString alloc]initWithData:[[error valueForKey:@"userInfo"] valueForKey:@"com.alamofire.serialization.response.error.data"] encoding:NSUTF8StringEncoding]); 
          callback(NO,nil); 
          [UtilityClass removeActivityIndicator]; 

         } else { 
          callback(YES,responseObject); 
         } 
        }]; 

    [uploadTask resume];