从服务器下载图像并保存到数据库中

时间:2013-05-18 07:48:28

标签: sqlite uiimage nsdata

我必须下载图像并将其保存到我的本地数据库中。所以我将图像存储在NSData中,而不是将其插入本地数据库。但是至少有50张图像来自服务器,因此将图像存储到NSData中,然后插入本地数据库需要花费更多时间。有没有解决方案,以便消耗更少的时间。

请建议我。

3 个答案:

答案 0 :(得分:0)

处理来自互联网的图像下载的更常见方式是将其缓存到内存(NSURLCache)或磁盘(SDWebImageView)。并且只将'image url'保存到数据库中。

缓存机制将找到您使用该URL的下一张图像。

答案 1 :(得分:0)

尝试将文件保存在光盘上,并将文件路径放入数据库,而不是将BLOB插入数据库

换句话说: 您的数据库将包含图像元数据和文件的绝对路径

你甚至可以这样做:

  • 创建文件路径

  • 下载图片时,会在此处将字节附加到文件中 创建文件路径(几种方法 - 通过使用手动 NSURLConnection,或使用一些像AFHTTPConnection和NSStream这样的库 附后)

  • 检查一切是否正常,然后将文件路径字符串放入您的 数据库或清理文件并报告错误

但最好是:

  • 将文件下载到临时目录

  • 检查一切是否正常,然后移至永久目录并在数据库中存储文件路径

  • 根据需要清理临时目录

  • 定期清理临时目录(顺便说一句,iOS有时会清理它)

答案 2 :(得分:0)

只需尝试使用HCDownload,它就是一个用于从网址下载图片的组件。只需下载此类并使用下面的代码就很容易了。下载完成后,将逐个调用所有图像的委托方法finishedDownloadingURL,然后将其路径(存储的图像路径)存储在数据库中。

HCDownload

使用此如下所述。

.h文件

#import "HCDownloadViewController.h"
@interface HomeViewController_iPhone : UIViewController<HCDownloadViewControllerDelegate>
{
    HCDownloadViewController *tblDownloadHairStyle;
}

@property (nonatomic,retain) HCDownloadViewController *tblDownloadHairStyle;

.m文件

@synthesize tblDownloadHairStyle;


- (void)viewDidLoad
{
    [super viewDidLoad];

    tblDownloadHairStyle=[[HCDownloadViewController alloc] init];
    tblDownloadHairStyle.delegate=self;
}


   //Where you download the image
      [self createDocumentDirectory:@"MyFolder"];  //create folder for save photo
     NSString *pathHair=[self getDocumentDirectoryPath:@"MyFolder"];
     tblDownloadHairStyle.downloadDirectory = pathHair;

    // your other code just get the image path
    NSString *strimage_path=[hairDictonary objectForKey:@"image_path"];
    strimage_path=[NSString stringWithFormat:@"http://yoururr.com/%@",strimage_path];
    [tblDownloadHairStyle downloadURL:[NSURL URLWithString:strimage_path] userInfo:hairDictonary];


 #pragma mark-
 #pragma mark-HCDownloadViewController Delegate Method

 - (void)downloadController:(HCDownloadViewController *)vc startedDownloadingURL:(NSURL *)url userInfo:(NSDictionary *)userInfo {
      NSLog(@"startedDownloadingURL=%@",url);
   }

- (void)downloadController:(HCDownloadViewController *)vc finishedDownloadingURL:(NSURL *)url toFile:(NSString *)fileName userInfo:(NSDictionary *)userInfo {
    NSLog(@"finishedDownloadingURL =%@",url);
}

- (void)downloadController:(HCDownloadViewController *)vc failedDownloadingURL:(NSURL *)url withError:(NSError *)error userInfo:(NSDictionary *)userInfo {
     NSLog(@"failedDownloadingURL=%@",url);
  }

#pragma mark - File Functions - Document Functions
-(void)createDocumentDirectory:(NSString*)pStrDirectoryName
{
    NSString *dataPath = [self getDocumentDirectoryPath:pStrDirectoryName];

    if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
        [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:NULL];
}

-(NSString*)getDocumentDirectoryPath:(NSString*)pStrPathName
{
    NSString *strPath = @"";
    if(pStrPathName)
        strPath = [[kAppDirectoryPath objectAtIndex:0] stringByAppendingPathComponent:pStrPathName];

    return strPath;
}

修改

另一种简单的方法是

ImageDownload