2014-02-12 3 views
0

Я создаю приложение, где мне нужно загрузить некоторые изображения с сервера и сохранить его для использования, когда сеть недоступна (и для сохранения данных). Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть базовый url (www.url.com/), и весь адрес изображения поступает из соединения JSON, но он выглядит следующим образом: Upload/Ctop/GC60V/JPEG/GC60V_concept.jpg. Поскольку у меня есть несколько различных изображений, каждое изображение пришло с другим путем, и мне нужно, чтобы сохранить его в одном из двух способов:Создание папок динамически с помощью url

  1. Просто имя файла в Documents/Upload/ или
  2. Создания папки с указанием полным путем в папке «Документы».

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

Что я сейчас делаю: - Я проверяю, есть ли обновление на сервере. Если она существует, я пытаюсь стереть папку /Upload/ и воссоздать его:

// Erase previous images 
     NSFileManager *filemgr = [NSFileManager defaultManager]; 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [NSString stringWithFormat:@"%@%@", [paths objectAtIndex:0], @"/Upload/"]; 

     NSLog(@"%@", [[NSFileManager defaultManager]contentsOfDirectoryAtPath:documentsDirectory error:nil]); 
     if ([filemgr removeItemAtPath: documentsDirectory error: NULL] == YES) { 
      NSLog(@"Folder removed: %@", documentsDirectory); 
     } 

Затем я получаю данные в формате JSON, и я пытаюсь «создать папки» и сохранить новые файлы:

// Download of categories images 
       if (![[NSString stringWithFormat:@"%@%@", URL_BASE, [[categories objectAtIndex:j] valueForKey:@"Path"]] isEqualToString:URL_BASE]) { 
        url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", URL_BASE, [[categories objectAtIndex:j] valueForKey:@"Path"]]]; 
        urlData = [NSData dataWithContentsOfURL:url]; 
       } 

       if (urlData) 
       { 
        NSLog(@"Starting categories image download..."); 
        NSLog(@"URL: %@", url); 

        NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, [[categories objectAtIndex:j] valueForKey:@"Path"]]; 
        [urlData writeToFile:filePath atomically:YES]; 
        NSLog(@"Download finished."); 
       } else { 
        NSLog(@"No categories image to download."); 
       } 

Как я понимаю, мне не хватает процесса для правильного создания папок, но я не могу понять, как я могу это сделать. Кроме того, я не знаю, как я могу это прочитать.

Любая помощь будет очень признательна!

Спасибо.

+1

Создать каталог перед 'writeToFile:' by [[NSFileManager defaultManager] createDirectoryAtPath: filePath withIntermediateDirectories: атрибуты YES: nil error: & err или]; ' – Akhilrajtr

+0

Я не верю, что это было так просто @ Ахилтрайт (на самом деле я это делаю!). Теперь он создает папки! но мне все же приходится решать проблему с именем файла, потому что я пытаюсь сохранить имя файла с полным путем (что-то вроде /Upload/Folder/etc/image.jpg), и я считаю, что мне нужно вырезать папки имя и просто имя изображения. Есть ли простой способ сделать это? Спасибо за помощь. – Tchelow

+0

, так что вам просто нужно 'Documents/Upload/imageName.jpg' как путь? – Akhilrajtr

ответ

1

первой очереди, когда и сохранение файла изображения на диск, каждое изображение должно ВГА другого имени, что и может получить доступ к нему в приложении, например,

Предположит, вы получаете изображение с сервера и может сохранить это, как показано ниже

 NSURL *url = [NSURL URLWithString:path]; 
    NSString *picname = [url lastPathComponent];//hear u are getting the image name as the last part of your url 
    NSString *imagePath = [NSString stringWithFormat:@"/uplpad/%@",picname]; //hear picname is unique for each download, thus u hav different name for each file u saved 

if(imageData != nil) 
    { 
     NSString *Dir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
     NSString *pngPath = [NSString stringWithFormat:@"%@%@",Dir,imagePath]; //path means ur destination contain's this format -> "/foldername/picname" pickname must be unique 
     if(![[NSFileManager defaultManager] fileExistsAtPath:[pngPath stringByDeletingLastPathComponent]]) 
     { 
      NSError *error; 
      [[NSFileManager defaultManager] createDirectoryAtPath:[pngPath stringByDeletingLastPathComponent] withIntermediateDirectories:YES attributes:nil error:&error]; 
      if(error) 
      { 
       NSLog(@"error in creating dir"); 
      } 
     } 
     [imageData writeToFile:pngPath atomically:YES]; 
    } 


выше вы сохраняете данные на диске в папке загрузки

для получения изображений и нужно использовать то же имя изображения, которое присутствует файл , например

NSString *Dir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *Path = [NSString stringWithFormat:@"%@%@",Dir,InDestination];//hear InDestination contains the path something like "/upload/uniqueImagename" 
    UIImage *image = [UIImage imageWithContentsOfFile:Path]; 
    if(image) 
    { 
    ..do somthing with image 
    } 
    else 
    { 
    ..image not found need to download and save 
    } 


для удаления папки

NSString *Dir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *pathToFolder = [NSString stringWithFormat:@"%@/%@",Dir,@"fbfriends"]; 

BOOL remove = [[NSFileManager defaultManager] removeItemAtPath:pathToFolder error:nil]; 
if(remove) 
{ 
    NSLog(@"success"); 
} 
else 
{ 
    NSLog(@"error"); 
} 
+0

Благодарим вас за подробное объяснение. Отлично! :) – Tchelow

+0

добро пожаловать ..... :) –

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