2013-05-18 145 views
0

我必須下載圖像並將其保存到本地數據庫中。所以我將圖像存儲在NSData中,並將其插入到本地數據庫中。但有至少50個圖像來自服務器,因此將圖像存儲到NSData中,然後插入本地數據庫需要更多時間。有沒有解決方案,以便消耗更少的時間。從服務器下載圖像並保存到數據庫中

請給我建議。

+0

沒有足夠的信息。什麼是圖像?你需要多久才能保持它們? – trojanfoe

回答

0

從互聯網處理圖像下載的更常見方法是將其緩存到內存(NSURLCache)或磁盤(SDWebImageView)中。並且只保存'圖片網址'到數據庫。

緩存機制將找到您使用該URL的圖片下一張圖片。

0

嘗試將文件保存在光盤上,並把文件路徑爲數據的基礎上,而不是插入的BLOB到數據庫

換句話說: 您的數據庫將包含圖像元數據和絕對路徑的文件

你可以這樣做,即使這樣:

  • 創建文件路徑

  • 雖然DOWNLO ading您的圖片 創建的文件路徑附加字節的文件(幾種方法可以做到 - 手動使用 NSURLConnection的,或使用一些庫像AFHTTPConnection與NSStream 附後)

  • 檢查,如果一切正常,然後把文件路徑字符串到您的 數據庫或清理文件和有關錯誤報告

但最好是:

  • 下載文件到臨時目錄

  • 檢查一切正常,然後移動到永久目錄和存儲文件路徑數據庫

  • 清潔你的臨時目錄,如果需要

  • 清理臨時目錄regulary(順便說一下,iOS有時會清除它)

0

只是嘗試與HCDownload它是一個組件,您用於從URL下載圖像。只需下載這個類,並使用下面的代碼,這是很容易的。一旦你的下載完成後,委託方法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

+0

看到我編輯的答案,其他參考.... –

相關問題