AFnetworking 2.2.0 загрузка изображения на серверные вопросы

Причина, почему вы должны это делать, потому что я путаюсь с параметрами.

Поскольку я понял там один способ, как это сделать, используя запрос с несколькими частями.

Таким образом, мы предлагаем две концепции, как я понял, загрузка из файла, которая может быть сохранена в каталоге Document или с использованием объекта NSData.

Загрузить из файла:

Поэтому я сохранил test.jpg в каталоге документа. Затем я делаю экземпляр NSURL для использования в многочастном запросе. В приведенном ниже коде показано, как я создаю экземпляр NSURL:

NSString *fileName = @"test.jpg"; NSString *folderPath = [documentsDirectory stringByAppendingPathComponent:fileName]; NSURL *filePath = [NSURL fileURLWithPath:folderPath]; 

Когда я печатаю путь к файлу:

 file:///Users/mac/Library/Application%20Support/iPhone%20Simulator/7.0.3/Applications/F732FCF6-EAEE-4E81-A88B-76ADB75EDFD1/Documents/test.jpg 

Затем я установил свои параметры и с помощью formData присоединил свой файл, как показано ниже:

 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); }]; 

Это верно? или, может быть, я что-то пропустил, потому что ответ не увенчался успехом?

Вторая концепция – непосредственно работать с данными:

 [formData appendPartWithFileData:imageData name:@"image" fileName:@"test.jpg" mimeType:@"image/jpeg"]; 

но когда приложение вызывает эту строку кода, я получил ошибку:

 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: body' 

Причина, по которой я полагаю, что imageData, определенная вне блока менеджера, равна нулю в этой строке. Поэтому мне нужна помощь, а также как передать ее в блок.

Пожалуйста, вы можете исправить меня, что не так в моих шагах, может быть, я что-то упустил.

Также, когда я комментирую строку

 [formData appendPartWithFileData:imageData name:@"image" fileName:@"test.jpg" mimeType:@"image/jpeg"]; 

или

 [formData appendPartWithFileURL:filePath name:@"image" error:nil]; 

то все работает отлично, и я получаю успешный ответ при повторном запуске.

Вы подтвердили, что файл находится в этом месте в папке «Документы»? У меня также есть проблемы с согласованием вашего программно определенного пути к файлу (который является правильным) с вашим строковым литералом (это может быть проблематично). Вы всегда должны программно определять путь, не используя строковые литералы (потому что при переустановке приложения этот путь изменится). Я думаю, что вам нужно что-то вроде:

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; NSDictionary *parameters = @{@"foo": @"bar"}; NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; NSString *filePath = [documentsPath stringByAppendingPathComponent:@"image.png"]; NSURL *fileURL = [NSURL fileURLWithPath:filePath]; [manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { NSError *error; BOOL success = [formData appendPartWithFileURL:fileURL name:@"image" fileName:filePath mimeType:@"image/png" error:&error]; if (!success) NSLog(@"appendPartWithFileURL error: %@", error); } success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"Success: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; 

Обратите внимание, что это программно определяет filePath (путь, а не URL-адрес), а затем использует fileURLWithPath для преобразования этого файла в URL-адрес файла. Он также подтверждает, было ли это успешным или нет, регистрируя ошибку, если она не удалась.

Также обратите внимание, что это предполагает, что ваш сервер возвращает свой ответ как JSON. Если нет, вам придется изменить responseSerializer .

  • AFNetworking 2.0, веб-сервис SOAP: как сделать запрос?
  • удаленное извлечение данных внутри объекта модели в объекте c с использованием AFNetworking
  • Внедрение пропусков AFNetworking
  • responseObject не JSON, а NSInLineData для AFHTTPRequestOperationManager
  • Метод POST AFNetworking с вложенным NSDictionary
  • как создать простой запрос Http через AFNetworking
  • AFNetworking необходимо обходить проверку ssl
  • setImageWithURLRequest: placeholderImage: success: failure Не вызывается блок
  • iOS AFNetworking автоматически запрашивает запрос при возврате интернет-соединения
  • com.apple.NSURLSession-work EXC_BAD_ACCESS Отладка от сбоев
  • Нежелательное кэширование запроса GET с использованием AFNetworking
  • Давайте будем гением компьютера.