отправить изображение вместе с другими параметрами с AFNetworking

Я обновляю старый код приложения, который использовалASIHTTPRequest сAFNetworking, В моем случае я отправляю данныеAPIЭти данные бывают разных типов: изображения и другие.

Вот код, который я до сих пор применяю, реализуя клиент API, запрашивая общий экземпляр, подготавливая словарь параметров и отправляя его в удаленный API:

NSMutableDictionary *params = [NSMutableDictionary dictionary];
[params setValue:@"Some value" forKey:aKey];

[[APIClient sharedInstance]
 postPath:@"/post"
 parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
     //some logic


 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
     //handle error

 }];

Что было бы в случае, когда я хочу добавить изображение вparams толковый словарь?

СASIHTTPRequestЯ делал следующее:

NSData *imgData = UIImagePNGRepresentation(anImage);

NSString *newStr = [anImageName stringByReplacingOccurrencesOfString:@"/"
                                                              withString:@"_"];



[request addData:imgData
    withFileName:[NSString stringWithFormat:@"%@.png",newStr]
  andContentType:@"image/png"
          forKey:anOtherKey];

Я копался вAFNetworking документацию и обнаружили, что они добавляют изображение вNSMutableRequest как это:

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"avatar.jpg"], 0.5);
NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:@"/upload" parameters:nil constructingBodyWithBlock: ^(id formData) {
    [formData appendPartWithFileData:imageData name:@"avatar" fileName:@"avatar.jpg" mimeType:@"image/jpeg"];
}];

Как я должен смешать это вместе аккуратным способом интегрировать данные моего изображения вAPIClient запрос? Спасибо заранее.

Ответы на вопрос(2)

Решение Вопроса

чтобы загрузить изображение с некоторым параметром. Этот код хорошо работает для меня. Может быть, это поможет

NSData *imageToUpload = UIImageJPEGRepresentation(uploadedImgView.image, 1.0);//(uploadedImgView.image);
if (imageToUpload)
{
    NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:keyParameter, @"keyName", nil];

    AFHTTPClient *client= [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://------"]];

    NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:@"API name as you have" parameters:parameters constructingBodyWithBlock: ^(id <afmultipartformdata>formData) {
        [formData appendPartWithFileData: imageToUpload name:@"image" fileName:@"temp.jpeg" mimeType:@"image/jpeg"];
    }];

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
     {
         NSDictionary *jsons = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil];
         //NSLog(@"response: %@",jsons);

     }
                                     failure:^(AFHTTPRequestOperation *operation, NSError *error)
     {
         if([operation.response statusCode] == 403)
         {
             //NSLog(@"Upload Failed");
             return;
         }
         //NSLog(@"error: %@", [operation error]);

     }];

    [operation start];
}
</afmultipartformdata>

Удачи !!

 Ajay Chaudhary23 мая 2013 г., 06:14
образ" является ключом для любого изображения, которое вы хотите загрузить.
 Ajay Chaudhary24 мая 2013 г., 08:00
Это тебе поможет?
 Malloc22 мая 2013 г., 17:17
Привет, куда ты положилkey для изображения? Thanx. @»
 klefevre09 сент. 2013 г., 19:04
@AjayChaudhary это помогло мне :) спасибо
 Shikhar varshney29 мая 2015 г., 08:28
что мне конкретно указать в параметре пути?

С AFNetworking 2.0.1 этот код работал для меня.

-(void) saveImage: (NSData *)imageData forImageName: (NSString *) imageName {
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    NSString *imagePostUrl = [NSString stringWithFormat:@"%@/v1/image", BASE_URL];
    NSDictionary *parameters = @{@"imageName": imageName};

    NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:imagePostUrl parameters:parameters constructingBodyWithBlock:^(id<afmultipartformdata> formData) {
        [formData appendPartWithFileData:imageData name:@"image" fileName:imageName mimeType:@"image/jpeg"];
    }];

    AFHTTPRequestOperation *op = [manager HTTPRequestOperationWithRequest:request success: ^(AFHTTPRequestOperation *operation, id responseObject) {
        DLog(@"response: %@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        DLog(@"Error: %@", error);
    }];
    op.responseSerializer = [AFHTTPResponseSerializer serializer];
    [[NSOperationQueue mainQueue] addOperation:op];
}
</afmultipartformdata>

Если требуется ответ JSON, используйте:

op.responseSerializer = [AFJSONResponseSerializer serializer];

вместо

op.responseSerializer = [AFHTTPResponseSerializer serializer];
 jerik25 нояб. 2013 г., 09:53
AFHTTPClient делится наAFHTTPRequestOperationManager & AFHTTPSessionManager, Это больше не существует в 2.0.

Ваш ответ на вопрос