Получение NSData из NSURL

Я пытаюсь загрузить фотографию из своего приложения в веб-сервис.

Поток, который я пытаюсь создать, выглядит следующим образом:

  1. Пользователь снимает фото с камеры
  2. Фото сохранено в фотопленке под пользовательским альбомом
  3. URL сохраненной фотографии передается в мой магазин
  4. Магазин пытается загрузить фотографию в веб-сервис.

Я пытаюсь использовать NSData *data = [NSData dataWithContentsOfURL:[item assetURL]] где item - модель, которая содержит соответствующий URL. Но эта строка не производит данные, когда я регистрирую их, даже если она производит URL: "assets-library://asset/asset.PNG?id=28DBC0AC-21FF-4560-A9D6-5F4BCA190BDB&ext=PNG"

Фрагменты кода следующие:

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{

    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];



    [self dismissViewControllerAnimated:YES completion:^(void){

        [library writeImageToSavedPhotosAlbum:image.CGImage orientation:image.imageOrientation completionBlock:^(NSURL* assetURL, NSError* error) {

            BCard *card = [[BCard alloc]init];

            //error handling
            if (error!=nil) {
                NSLog(@"[ERROR] - %@",error);
                return;
            }

            //add the asset to the custom photo album
            [library addAssetURL: assetURL
                         toAlbum:@"Business Cards"
             withCompletionBlock:^(NSError *error) {
                 if (error!=nil) {
                     NSLog(@"Custom Album Error: %@", [error description]);
                 }
             }];

            [card setAssetURL:assetURL];

            [[BCardStore sharedStore]addToQueue:card];
            int index = [[[BCardStore sharedStore]getQueue]count]-1;

            [[BCardStore sharedStore]uploadItemAtIndex:index withProgressBlock:nil withExitBlock:nil];

        }];
    }];


}

а также

-(void)uploadItemAtIndex:(NSUInteger)index withProgressBlock:(progressBlock)pBlock withExitBlock:(exitBlock)eBlock
{
    BCard *item = [uploadQueue objectAtIndex:index];
    NSURL *url = [NSURL URLWithString:@"http://192.168.0.116:8080"];
    NSData *data = [NSData dataWithContentsOfURL:[item assetURL]];
    AFHTTPClient *httpClient = [[AFHTTPClient alloc]initWithBaseURL:url];
    numberedName = numberedName +1;
    NSString *name = [NSString stringWithFormat:@"%d",numberedName];

    NSLog(@"%@",[item assetURL]);

//upload data using AFNetworking here
}

Фрагмент [library addAssetUrl:NSUrl toAlbum:NSString withCompletionBlock:^(NSError *error)] пришел из категории, которую я нашел здесь.

Я действительно получаю правильный URL здесь или я использую dataWithContentsOfURL неправильно?

1 ответ

Решение

Единственный способ - вы можете получить UIImage из библиотеки фотографий, используя URL-адрес ALAsset, и преобразовать его в NSData.

Добавить ALAssetLibrary

Импорт файла заголовка ALAssetLibrary

-(void)uploadItemAtIndex:(NSUInteger)index 
       withProgressBlock:(progressBlock)pBlock 
           withExitBlock:(exitBlock)eBlock
{  

    ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
    {
        ALAssetRepresentation *rep;
        if([myasset defaultRepresentation] == nil) {
            return;
        } else {
            rep = [myasset defaultRepresentation];
        }
        CGImageRef iref = [rep fullResolutionImage];

        dispatch_sync(dispatch_get_main_queue(), ^{


            UIImage *myImage = [UIImage imageWithCGImage:iref];            
            NSData *data = //convert the myImage to NSData

            BCard *item = [uploadQueue objectAtIndex:index];
            NSURL *url = [NSURL URLWithString:@"http://192.168.0.116:8080"];  
            AFHTTPClient *httpClient = [[AFHTTPClient alloc]initWithBaseURL:url];
            numberedName = numberedName +1;
            NSString *name = [NSString stringWithFormat:@"%d",numberedName];



            //upload data using AFNetworking here


        });//end block


    };
    ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *myerror)
    {
        NSLog(@"Cant get image - %@",[myerror localizedDescription]);
    };

    NSURL *asseturl = 
        [NSURL URLWithString:[self.photoPath objectAtIndex:[arrayIndex intValue] ]];
    //using ARC , you have to declare ALAssetsLibrary as member variable 
    ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init]; 

    [assetslibrary assetForURL:assetURL 
                   resultBlock:resultblock
                  failureBlock:failureblock]; 

}
Другие вопросы по тегам