我必須下載圖像並將其保存到本地數據庫中。所以我將圖像存儲在NSData中,並將其插入到本地數據庫中。但有至少50個圖像來自服務器,因此將圖像存儲到NSData中,然後插入本地數據庫需要更多時間。有沒有解決方案,以便消耗更少的時間。從服務器下載圖像並保存到數據庫中
請給我建議。
我必須下載圖像並將其保存到本地數據庫中。所以我將圖像存儲在NSData中,並將其插入到本地數據庫中。但有至少50個圖像來自服務器,因此將圖像存儲到NSData中,然後插入本地數據庫需要更多時間。有沒有解決方案,以便消耗更少的時間。從服務器下載圖像並保存到數據庫中
請給我建議。
從互聯網處理圖像下載的更常見方法是將其緩存到內存(NSURLCache)或磁盤(SDWebImageView)中。並且只保存'圖片網址'到數據庫。
緩存機制將找到您使用該URL的圖片下一張圖片。
嘗試將文件保存在光盤上,並把文件路徑爲數據的基礎上,而不是插入的BLOB到數據庫
換句話說: 您的數據庫將包含圖像元數據和絕對路徑的文件
你可以這樣做,即使這樣:
創建文件路徑
雖然DOWNLO ading您的圖片 創建的文件路徑附加字節的文件(幾種方法可以做到 - 手動使用 NSURLConnection的,或使用一些庫像AFHTTPConnection與NSStream 附後)
檢查,如果一切正常,然後把文件路徑字符串到您的 數據庫或清理文件和有關錯誤報告
但最好是:
下載文件到臨時目錄
檢查一切正常,然後移動到永久目錄和存儲文件路徑數據庫
清潔你的臨時目錄,如果需要
清理臨時目錄regulary(順便說一下,iOS有時會清除它)
只是嘗試與HCDownload它是一個組件,您用於從URL下載圖像。只需下載這個類,並使用下面的代碼,這是很容易的。一旦你的下載完成後,委託方法finishedDownloadingURL被逐一調用所有圖像,然後將其路徑(存儲在你存儲的路徑)存儲在數據庫中。
使用下面這是形容。
.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;
}
編輯
另一個簡單的辦法是
看到我編輯的答案,其他參考.... –
沒有足夠的信息。什麼是圖像?你需要多久才能保持它們? – trojanfoe