2016-11-07 93 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];