AFHTTPSessionManager add body to POST

后端 未结 2 1069
走了就别回头了
走了就别回头了 2021-02-08 04:43

I need too make a post request to my server.

With AFHTTPRequestOperation is very simple just use:

[request setHTTPBody: [requestBody dat         


        
相关标签:
2条回答
  • 2021-02-08 05:13

    As taken from the AFNetworking home page, to create a multipart/form-data request, you call appendPartWithFileURL:

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    NSDictionary *parameters = @{@"foo": @"bar"};
    NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];
    [manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileURL:filePath name:@"image" error:nil];
    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"Success: %@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];
    

    But AFHTTPRequestOperationManager is deprecated. So, instead, use AFHTTPSessionManager, for which the syntax of POST with the constructingBodyWithBlock is very similar:

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    NSDictionary *parameters = @{@"foo": @"bar"};
    NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];
    [manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileURL:filePath name:@"image" error:nil];
    } progress:nil success:^(NSURLSessionDataTask *operation, id responseObject) {
        NSLog(@"Success: %@", responseObject);
    } failure:^(NSURLSessionDataTask *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];
    

    Alternatively, if you want to post a request of the form foo=bar&key=value&... (i.e. an application/x-www-form-urlencoded request), you would do something like:

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    NSDictionary *parameters = @{@"foo": @"bar", @"key": @"value"};
    [manager POST:@"http://example.com/resources.json" parameters:parameters progress:nil success:^(NSURLSessionDataTask *task, id responseObject) {
        NSLog(@"Success: %@", responseObject);
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        NSLog(@"Error: %@", error);
    }];
    
    0 讨论(0)
  • 2021-02-08 05:23

    Try this other way.

    I'm converting my image in data format which is imageData.

    NSData *imageData=nil;
    imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"yourimageName"],0.2);
    NSMutableDictionary *dict=[NSMutableDictionary new];
    [dict setObject:@"user1" forKey:@"param_name1"];
    [dict setObject:@"User2" forKey:@"param_name2"];
    
    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] init];
    
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
    manager.responseSerializer = [AFJSONResponseSerializer
                                  serializerWithReadingOptions:NSJSONReadingAllowFragments];
    [manager POST:@"API NAME" parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
    
     if(imageData)
     {
         [formData appendPartWithFileData:imageData  name:@"param_name" fileName:@"filename.jpg" mimeType:@"image/jpeg"];
     }
     } progress:^(NSProgress * _Nonnull uploadProgress)
     {
         NSLog(@"%@",uploadProgress);
     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
         NSLog(@"%@",responseObject);
    
     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
         NSLog(@"%@",error);
    
     }];
    
    0 讨论(0)
提交回复
热议问题