2014-12-05 3 views
0

Я пытаюсь загрузить изображение/видео на веб-сервер для iOS. Загружаемая часть этого сервера отлично работает. Я проверил его с версией Android, и я уже реализовал метод загрузки в приложении для Android. Итак, я нашел несколько кодов для iOS на stackoverflow.com Во-первых, я использую следующий код для загрузки изображения. Но я не могу загрузить вообще и получить следующий результат. Я использую XCode6.1 в SDK iOS8.Как загрузить изображение/фотографию на сервер с помощью AFNetworking?

Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo=0x7fe24348d0b0 {NSUnderlyingError=0x7fe2434be120 "The request timed out.", NSErrorFailingURLStringKey=ServerURL, NSErrorFailingURLKey=ServerURL, NSLocalizedDescription=The request timed out.} 

Вот коды, которые я использую.

NSString* serverURL = @"http://www.myserver.com/file/postMedia.php"; 
    UIImage *image = [UIImage imageNamed:@"sample.png"]; 
    NSData *imageData = UIImageJPEGRepresentation(image, 0.5); 
    NSDictionary *param = @{@"userID":@"master", 


    [manager POST:serverURL parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
    [formData appendPartWithFileData:imageData name:@"uploadedfile_thumb" fileName:@"photo.jpg" mimeType:@"image/jpeg"]; 

} success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    .... 
     }); 

     return; 
    } 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    .... 
}); 

Конечно, сервер работает нормально. Я определенно протестировал с Android-кодом. Так что я хотел бы знать точный код для iOS.

Спасибо

ответ

0

Это мой рабочий код загрузки изображения на сервер с помощью AFNetworking:

+ (void)uploadImage:(UIImage *)image 
      ForUser:(WECUser *)user 
    withSuccessBlock:(void (^)(NSDictionary *response))resultBlock 
     faliureBlock:(void (^)(NSError *error))faliureBlock { 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 

    formatter.dateFormat = @"yyyyMMddHHmmss"; 
    NSString *dateString = [formatter stringFromDate:[NSDate date]]; 
    NSString *fileName = 
     [NSString stringWithFormat:@"user_image_%@.jpg", dateString]; 

    NSDictionary *dictionary = @{ 
    @"user_id" : user._id, 
    @"resource_id" : user._id, 
    @"functioncode" : @"2000", 
    @"app_id" : [WECURLGenerator stringOfAppID], 
    @"file_name" : fileName 
    }; 

    NSURLRequest *request = [[AFHTTPRequestSerializer serializer] 
     multipartFormRequestWithMethod: 
      @"POST" URLString:[WECURLGenerator stringOfImageUploadingBaseURL] 
          parameters:dictionary 
      constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
       [formData 
        appendPartWithFileData:UIImageJPEGRepresentation(image, 0.6) 
            name:@"file1" 
           fileName:fileName 
           mimeType:@"jpg"]; 
      } error:(NULL)]; 

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

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, 
              id responseObject) { 
     NSDictionary *resultDict = 
      [NSJSONSerialization JSONObjectWithData:responseObject 
              options:NSJSONReadingMutableLeaves 
              error:nil]; 
     resultBlock(resultDict[@"record"]); 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     faliureBlock(error); 
    }]; 

    [operation start]; 
} 

Надеется, что это помогает.

0

Ваш код выглядит отлично, я использую тот же код для загрузки изображения с помощью AFNetworking. Но вы не упомянули, как вы выбираете изображение. Потому что вы не можете загрузить изображение непосредственно нравится:

UIImage *image = [UIImage imageNamed:@"sample.png"]; 

Вы используете UIImagePickerController для выбора вашего изображения?

Если ДА, то лучше, чем увидеть мой код;

-(IBAction)chooseImg:(id)sender{ 

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
    picker = [[UIImagePickerController alloc]init]; 
    picker.allowsEditing = NO; 
    picker.delegate = self; 
    picker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType: UIImagePickerControllerSourceTypeCamera]; 
    [self.navigationController presentViewController:picker animated:YES completion:nil]; 
} 
else{ 
    picker = [[UIImagePickerController alloc]init]; 
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    picker.allowsEditing = YES; 
    picker.delegate = self; 
    picker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; 
    [self.navigationController presentViewController:picker animated:YES completion:nil]; 

} 
} 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ 
NSURL *name = [info objectForKey:UIImagePickerControllerReferenceURL]; 
image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
ALAssetsLibraryAssetForURLResultBlock resultBlock = ^(ALAsset *imageAsset){ 
    ALAssetRepresentation *imageRep = [imageAsset defaultRepresentation]; 
    NSDictionary *metadata = imageAsset.defaultRepresentation.metadata; 
    NSLog(@"Meta:%@",metadata); 
    NSString *str = [imageRep filename]; 
    txtImg.text = str; 
}; 
ALAssetsLibrary *assetLib = [[ALAssetsLibrary alloc]init]; 
[assetLib assetForURL:name resultBlock:resultBlock failureBlock:nil]; 
[self.navigationController dismissViewControllerAnimated:YES completion:nil]; 
} 

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

чем в части загрузки данных:

NSString* serverURL = @"http://www.myserver.com/file/postMedia.php"; 
    //UIImage *image = [UIImage imageNamed:@"sample.png"]; 
    NSData *imageData = UIImageJPEGRepresentation(image, 0.5); 
    NSDictionary *param = @{@"userID":@"master", 


    [manager POST:serverURL parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
    [formData appendPartWithFileData:imageData name:@"uploadedfile_thumb" fileName:@"photo.jpg" mimeType:@"image/jpeg"]; 

} success:^(AFHTTPRequestOperation *operation, id responseObject) { 
.... 
    }); 

    return; 
} 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
.... 
}); 

Это работает для меня загрузки изображения. Надеюсь, это сработает для вас.

+0

Для использования ALAssetsLibrary не забудьте импортировать Hiren

Смежные вопросы