2013-11-15 2 views
6

Как загрузить изображение с URL-адреса и сохранить его на компьютере с помощью Objective-C? Это то, что я до сих пор:Как загрузить изображение из URL-адреса и сохранить его на моем компьютере?

NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

UIImage *imageFromURL = [self getImageFromURL:@"https://www.google.com/images/srpr/logo11w.png"]; 

[self saveImage:imageFromURL withFileName:@"Google Logo" ofType:@"png" inDirectory:documentsDirectoryPath]; 

UIImage *imageFromWeb = [self loadImage:@"Google Logo" ofType:@"png" inDirectory:documentsDirectoryPath]; 

Xcode жалуется UIImage, пытаясь заменить NSImage. Он также жалуется на необъявленный идентификатор «я».

Мне нужно сделать HTTP-вызов, чтобы выполнить это. Объясните это мне, как будто я 5.

+1

так что это программа для Mac OS X? – Raptor

+0

Да, я пытаюсь сохранить на жесткий диск компьютера Mac OS X. –

+0

Это делается с помощью приложения iOS (вы отметили вопрос с помощью iOS) или это нужно сделать с помощью приложения Mac? – rmaddy

ответ

6

Вот код для сохранения изображения в каталоге документов.

-(void)saveImagesInLocalDirectory 
{ 
     NSString * documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
      NSString *imgName = @"image.png"; 
      NSString *imgURL = @"www.example.com/image/image.png"; 
      NSFileManager *fileManager = [NSFileManager defaultManager]; 
      NSString *writablePath = [documentsDirectoryPath stringByAppendingPathComponent:imgName]; 

      if(![fileManager fileExistsAtPath:writablePath]){ 
       // file doesn't exist 
       NSLog(@"file doesn't exist"); 
       if (imgName) { 
        //save Image From URL 
        [self getImageFromURLAndSaveItToLocalData:imgName fileURL:imgURL inDirectory:documentsDirectoryPath]; 
       } 
      } 
      else{ 
       // file exist 
       NSLog(@"file exist"); 
      } 
} 

-(void) getImageFromURLAndSaveItToLocalData:(NSString *)imageName fileURL:(NSString *)fileURL inDirectory:(NSString *)directoryPath { 
    NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]]; 

    NSError *error = nil; 
    [data writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", imageName]] options:NSAtomicWrite error:&error]; 

    if (error) { 
     NSLog(@"Error Writing File : %@",error); 
    }else{ 
     NSLog(@"Image %@ Saved SuccessFully",imageName); 
    } 
} 

И это код один способ ..

-(void)saveImagesInLocalDirectory 
{ 
     NSString * documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
      NSString *imgName = @"image.png"; 
      NSString *imgURL = @"www.example.com/image/image.png"; 
      NSFileManager *fileManager = [NSFileManager defaultManager]; 
      NSString *writablePath = [documentsDirectoryPath stringByAppendingPathComponent:imgName]; 

      if(![fileManager fileExistsAtPath:writablePath]){ 
       // file doesn't exist 
       NSLog(@"file doesn't exist"); 
        //save Image From URL 
        NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString: imgURL]]; 

        NSError *error = nil; 
        [data writeToFile:[documentsDirectoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", imgName]] options:NSAtomicWrite error:&error]; 

        if (error) { 
          NSLog(@"Error Writing File : %@",error); 
        }else{ 
          NSLog(@"Image %@ Saved SuccessFully",imgName); 
        } 
      } 
      else{ 
       // file exist 
       NSLog(@"file exist"); 
      } 
} 
+0

Большое спасибо за вашу помощь, но я полный новичок. Есть ли способ сделать это без использования пользовательских методов? Если нет, это не имеет большого значения, я по-прежнему буду принимать ответ после того, как выясню, как это работает. –

+0

Метод не является большой проблемой, я только что создал его для абстракции bcoz в своем приложении. Я использую тот же самый метод за раз, что и все. Вы можете добавить второй метод в первом методе, который в порядке. – Dilip

+0

Хорошо, позволь мне дать ему вращение, как только я это сделаю, я вернусь и приму свой ответ. –

0

Это мое решение!

+(BOOL)downloadMedia :(NSString*)url_ :(NSString*)name{ 
    NSString *stringURL = url_; 
    NSURL *url = [NSURL URLWithString:stringURL]; 
    NSData *urlData = [NSData dataWithContentsOfURL:url]; 
    if (urlData) 
    { 
     NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 

     NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,name]; 
     [urlData writeToFile:filePath atomically:YES]; 
     return YES; 
    } 
    return NO; 
} 

+(UIImage*)loadMedia :(NSString*)name{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent:name]; 
    UIImage *img_ = [UIImage imageWithContentsOfFile:getImagePath]; 
    return img_; 
} 
Смежные вопросы