Загрузка изображения с помощью AFNetworking 2.0


Я пытаюсь добавить фотографию к сообщению, используя AFNetworking 2.0. Это приложение для ios отправляет сообщение и фотографию в блог. Я не могу понять, почему изображения не загружаются.

Вот что я получил до сих пор:

// publish text and image
-(void)publishTextAndImage:(NSString*)resultDisplay and:(NSString*)subject with:(NSString*)nonce
{
imageData = UIImageJPEGRepresentation(selectedImage, 0.7); // create a data object from selected image

NSString *myUUID = [[NSUUID UUID] UUIDString]; // create a UUID
NSString *formatString = [NSString stringWithFormat:@"<img src="/wp-content/uploads/%@"/>",myUUID];
NSString *contentString = [formatString stringByAppendingString:resultDisplay];
NSString *moodString = [NSString stringWithFormat:@"%d",self.moodNumber];

NSDictionary *parameters = @{@"title":subject,
                             @"content":contentString,
                             @"status":@"publish",
                             @"author":@"wordpress",
                             @"user_password":@"xrayyankee",
                             @"nonce":nonce,
                             @"categories":moodString,
                             @"attachment":@"image/jpeg"};

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

[manager POST:@"http://thrills.it/?json=posts/create_post" 
 parameters:parameters 
 constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
 {
     if (selectedImage)
     {
         [formData appendPartWithFileData:imageData name:@"photo" fileName:myUUID mimeType:@"image/jpeg"];
     }

 } 
 success:^(AFHTTPRequestOperation *operation, id responseObject)
 {
     NSLog(@"JSON: %@", responseObject);

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

}

Большое Спасибо

2 7

2 ответа:

Я использую AFNetworking следующим образом:

AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://thrills.it/?json=posts"]];
NSURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:@"create_post" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
{
     if (selectedImage)
     {
         [formData appendPartWithFileData:imageData name:@"photo" fileName:myUUID mimeType:@"image/jpeg"];
     }

} ];

AFJSONRequestOperation *operation = [AFJSONRequestOperation    JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) 
{
    NSLog(@"JSON: %@", responseObject);
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
    NSLog(@"Error: %@", error);
}];

[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
    float progressValue = (float)((double)totalBytesWritten/(double)totalBytesExpectedToWrite);
    NSLog(@"%f", progressValue);
}];

[self.queue addOperation:operation];

.

@property (nonatomic, strong) NSOperationQueue *queue;

Мой клиент был создан раньше, но он был создан именно так.

Я надеюсь, что это поможет.

Я понял, код был в порядке, это была проблема с наименованием параметров, вот она:

// publish text and image
-(void)publishTextAndImage:(NSString*)resultDisplay and:(NSString*)subject with:    (NSString*)nonce
{
imageData = UIImageJPEGRepresentation(selectedImage, 0.7); // create a data object from     selected image

NSString *myUUID = [[NSUUID UUID] UUIDString]; // create a UUID
NSString *formatString = [NSString stringWithFormat:@"<img src=\"/wp-    content/uploads/%@\"/>",myUUID];
NSString *contentString = [formatString stringByAppendingString:resultDisplay];
NSString *moodString = [NSString stringWithFormat:@"%d",self.moodNumber];

NSDictionary *parameters = @{@"title":subject,
                         @"content":contentString,
                         @"status":@"publish",
                         @"author":@"wordpress",
                         @"user_password":@"xrayyankee",
                         @"nonce":nonce,
                         @"categories":moodString};

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

[manager POST:@"http://thrills.it/?json=posts/create_post" 
 parameters:parameters 
 constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
 {
 if (selectedImage)
 {
     [formData appendPartWithFileData:imageData name:@"attachment" fileName:myUUID     mimeType:@"image/jpeg"];
 }

} 
success:^(AFHTTPRequestOperation *operation, id responseObject)
{
 NSLog(@"JSON: %@", responseObject);

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

Таким образом, в основном я удалил параметр "attachment"из словаря параметров и изменил имя добавленного imageData на @"attachment". это была проблема wordpress JSON api, который был очень придирчивым (: