Как загрузить файл с помощью AFNetworking 2.0

Мне сложно просматривать результаты поиска, чтобы узнать, как это сделать, и я не могу найти ничего конкретного в документации. Я просто хочу загрузить файл и сохранить его в каталоге документов. Файл имеет тип .plist, но мне не нужно разбирать список. Как я уже сказал, мне просто нужно сохранить его на диск.

Могу ли я использовать для этого AFHTTPRequestOperationManager?

Это то, что я в целом пробовал:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    //manager.responseSerializer = [AFPropertyListResponseSerializer serializer];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    [manager GET:url parameters:nil
         success:^(AFHTTPRequestOperation *operation, id responseObject) {
             DLog(@"downloaded plist");
         }
         failure:^(AFHTTPRequestOperation *operation, NSError *error) {
             DLog(@"JSON DataError: %@", error);
         }];

Если я использую AFHTTPResponseSerializer, я получаю следующее:

Error Domain=AFNetworkingErrorDomain Code=-1011 "Request failed: internal server error (500)"

Если я использую AFPropertyListResponseSerializer, я получаю следующее:

Error Domain=AFNetworkingErrorDomain Code=-1016 "Request failed: unacceptable content-type: text/plain"

Но я даже не уверен, что использую правильный API.


person soleil    schedule 23.11.2013    source источник
comment
(Это) [stackoverflow.com/questions/8372661/ может помочь.   -  person n00bProgrammer    schedule 23.11.2013
comment
Однако здесь используется старая версия AFNetworking. Это все еще рекомендуемый способ?   -  person soleil    schedule 23.11.2013
comment
Пытался, и я все еще получаю сообщение об ошибке: Error Domain = AFNetworkingErrorDomain Code = -1011 Не удалось выполнить запрос: внутренняя ошибка сервера (500)   -  person soleil    schedule 23.11.2013
comment
Рекомендуемый способ загрузки файлов с помощью AFNetworking 2.0 - github.com/AFNetworking/AFNetworking#creating -a-download-task   -  person Kyr Dunenkoff    schedule 23.11.2013
comment
stackoverflow.com/questions/19295696 /   -  person n00bProgrammer    schedule 23.11.2013


Ответы (1)


Пожалуйста, попробуйте этот пример. Надеюсь на эту помощь!

// Step 1: create NSURL with full path to downloading file
// for example try this: NSString *fileUrl = @"https://pbs.twimg.com/profile_images/2331579964/jrqzn4q29vwy4mors75s_400x400.png";
// And create NSURLRequest object with our URL
NSURL *URL = [NSURL URLWithString:fileUrl];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

// Step 2: save downloading file's name
// For example our fileName string is equal to 'jrqzn4q29vwy4mors75s_400x400.png'
NSString *fileName = [URL lastPathComponent];

// Step 3: create AFHTTPRequestOperation object with our request
AFHTTPRequestOperation *downloadRequest = [[AFHTTPRequestOperation alloc] initWithRequest:request];

// Step 4: set handling for answer from server and errors with request
[downloadRequest setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
            // here we must create NSData object with received data...
            NSData *data = [[NSData alloc] initWithData:responseObject];
            // ... and save this object as file
            // Here 'pathToFile' must be path to directory 'Documents' on your device + filename, of course
            [data writeToFile:pathToFile atomically:YES];
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"file downloading error : %@", [error localizedDescription]);
        }];

// Step 5: begin asynchronous download
[downloadRequest start];

Что-то еще: Что лучше как найти каталог документов пользователя на iPhone?

person Aleksey Khatmullin    schedule 26.06.2014
comment
Напишите какое-нибудь объяснение. - person Yogesh Suthar; 15.07.2014
comment
Извините за мой плохой стиль в ответах :) Теперь это лучше? - person Aleksey Khatmullin; 17.07.2014
comment
Можете ли вы сказать мне, что, если один и тот же запрос будет выполняться несколько раз? Можем ли мы проверить перед началом загрузки, уже запущен ли процесс для того же запроса? - person User 1531343; 07.10.2014
comment
Хороший вопрос! Но, извините, я не знаю ответа на этот вопрос. Но я думаю, вы можете проверить, существует или не существует файл в 'pathToFile' - person Aleksey Khatmullin; 10.10.2014
comment
@BhavikKama, почему мы не можем добавить следующий запрос в очередь и установить maxConcurrentOperationCount? - person Sravan; 29.02.2016
comment
как вызвать метод типа Get и передать некоторые данные заголовка для загрузки файла - person DURGESH; 01.03.2017