我要下载图片,并保存到我的本地数据库。 所以我存储的NSData比将其插入到本地数据库中的图像。 但也有ATLEAST 50张图片来自服务器,以便存储图像转换成的NSData,然后插入到本地数据库就花费更多的时间来了。 是否有任何解决方案,因此,这将消耗更少的时间。
请给我建议。
我要下载图片,并保存到我的本地数据库。 所以我存储的NSData比将其插入到本地数据库中的图像。 但也有ATLEAST 50张图片来自服务器,以便存储图像转换成的NSData,然后插入到本地数据库就花费更多的时间来了。 是否有任何解决方案,因此,这将消耗更少的时间。
请给我建议。
比较常见的方式来处理从互联网上下载的图像只是它缓存到内存(NSURLCache)或磁盘(SDWebImageView)。 只有保存“图像URL”到数据库中。
缓存机制会发现您使用的URL的图片下一张图片。
试着将文件保存在光盘上,并把文件路径为数据的基础上,而不是插入的BLOB到数据库
换句话说:你的数据库将包含图像元数据和绝对路径的文件
你可以这样做,即使这样的:
创建文件路径
虽然下载您的图片创建的文件路径附加字节的文件(几种方法可以做到 - 手动使用NSURLConnection的,或使用一些像库与AFHTTPConnection附NSStream)
检查一切正常,然后把文件路径字符串到你的数据库或清理文件和有关错误报告
但最好是:
下载文件到临时目录
检查一切正常,然后移动到数据库中永久目录和存储文件路径
如果需要清洁您的临时目录
清洁您的临时目录regulary(顺便说一句,iOS设备有时会清理)
只是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