Запрос формы AFNetworking (загрузка нескольких файлов в одном запросе)

Мы разрабатываем iOS-приложение. Приложение предоставляет как одиночные, так и несколько вариантов загрузки файлов в одном запросе. Я использую AFNetworking для загрузки отдельных файлов, и он отлично работает. Теперь нам нужно поддерживать загрузку нескольких файлов. У меня есть html-код, который фактически выполняет загрузку нескольких файлов из Интернета. Мне нужно сделать то же самое из приложения iOS. Кто-нибудь может подсказать, как сделать то же самое с помощью AFNetworking?

<form method="post" action="upload.php?key=ac2a04cc7b6d4420fa5e5eb1701fb0cc1acf7916&channelid=1" enctype="multipart/form-data">
<label>Title:</label> <input name="title" value="My Video Title" /><br />
<label>Date:</label> <input name="date" value="<?php echo time(); ?>" /><br />
<label>Location:</label> <input name="location" value="Sydney, Australia" /><br />
<textarea name="description">The description of the photo/video goes here</textarea><br />
<input name="file[]" type="file" multiple="multiple" /><br />


person Lessa Antony    schedule 08.04.2013    source источник
comment
Пожалуйста, проверьте обновленный код.   -  person Janak Nirmal    schedule 09.04.2013


Ответы (2)


Используйте приведенный ниже код для отправки нескольких файлов в форму. Настройте в соответствии с вашими потребностями, если требуется что-то изменить.

  NSArray *imageArray = [NSArray arrayWithObjects:[UIImage imageNamed:@"close_button.png"],[UIImage imageNamed:@"done_button.png"], nil];
    __block int i=1;
    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:@"yoururl"];
    NSMutableURLRequest *request=nil;
        request = [httpClient multipartFormRequestWithMethod:@"POST" path:@"yoururl" parameters:nil constructingBodyWithBlock: ^(id <AFMultipartFormData>formData)
        {
            for(UIImage *eachImage in imageArray)
            {
                NSData *imageData = UIImagePNGRepresentation(eachImage);
                [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"file%d",i] fileName:[NSString stringWithFormat:@"abc%d.png",i] mimeType:@"image/png"];
                i++;
            }

        }];

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    [httpClient registerHTTPOperationClass:[AFHTTPRequestOperation class]];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
     {
         NSData *data = (NSData *)responseObject;
         NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
         NSLog(@"Response -> %@",str);

     } failure:^(AFHTTPRequestOperation *operation, NSError *error)
     {
         NSLog(@"Error -> %@",[error localizedDescription]);
     }];

На стороне сервера я проверил код test.php, я только что напечатал print_r($_FILES), и в моем случае он печатает следующее, извините, что заставил вас гадать.

Response -> Array
(
    [file1] => Array
        (
            [name] => abc1.png
            [type] => image/png
            [tmp_name] => /tmp/phpiWbxSn
            [error] => 0
            [size] => 1997
        )

    [file2] => Array
        (
            [name] => abc2.png
            [type] => image/png
            [tmp_name] => /tmp/phpwtWTE8
            [error] => 0
            [size] => 1847
        )
)

Надеюсь это поможет.

person Janak Nirmal    schedule 08.04.2013
comment
NSMutableURLRequest не будет доступен вне цикла. - person nsgulliver; 08.04.2013
comment
Спасибо @Jennis за ваш ответ. Я вижу проблему с вашим кодом. В цикле for вы назначаете переменную запроса с разными значениями. При этом предыдущее значение теряется. Это загрузит только последнее изображение, так как запрос будет указывать только на составной запрос конечного изображения. - person Lessa Antony; 09.04.2013
comment
Также стоит отметить, что загрузка изображения в память чрезвычайно затратна. Оформить заказ appendPartWithFileURL:name:error для повышения производительности. - person MishieMoo; 12.04.2013
comment
@MishieMoo Вы также можете опубликовать ответ по желанию. :D Спасибо за указание. - person Janak Nirmal; 12.04.2013
comment
Примечание: не забудьте выполнить [начало операции] в конце, чтобы все действительно заработало. ;) - person Ben; 01.11.2013

Я пробовал решение AFHTTPNetwrok, но оно не работало, затем я добавил квадратные скобки в ключ «имя», как показано ниже, и, наконец, изображения успешно загружены. Что может меня беспокоить?

NSData *imageData = UIImageJPEGRepresentation(img,1);
            [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"images[%d]",i] fileName:[NSString stringWithFormat:@"images%d.jpg",i] mimeType:@"image/jpeg"];
person Beeka5    schedule 13.08.2015