2014-02-12 85 views
0

我正在创建一个应用程序,我必须从服务器下载一些图像并将其存储以在网络不可用(并保存数据)时使用。 我面临的问题是,我有一个基址(www.url.com/),所有的图像地址来自JSON连接,但它是这样的:Upload/Ctop/GC60V/JPEG/GC60V_concept.jpg。因为我有一些不同的图像,每幅图像想出了一个不同的路径,我需要将其存储在的两种方法之一:使用url动态创建文件夹

  1. Documents/Upload/
  2. 只是文件名以完整路径创建文件夹在Documents目录中。

对于这两种方式,我必须能够(当然)恢复图像。

我现在正在做的是: - 我检查服务器是否有更新。如果它存在,我试图抹掉的/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:'''[NSFileManager defaultManager] createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:&err或者];' – Akhilrajtr

+0

我不相信这很简单@Akhilrajtr(实际上我是这么做的!)。它现在正在创建文件夹!但我仍然必须解决与文件名的问题,因为我试图用完整的路径保存文件的名称(类似于/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

欢迎..... :) –