Downloading images from server and saving into Database

两盒软妹~` 提交于 2019-12-11 16:16:20

问题


I have to download images and save it into my local database. So I am storing the images in NSData and than inserting it into local database. But there are atleast 50 images coming from the server so storing the images into NSData and then inserting into local database it taking more time. Is there any solution so that it will consume less time.

Please suggest me.


回答1:


The more common way to handle image download from the internet is just cache it to the memory(NSURLCache) or disk(SDWebImageView). and only save the 'image url' to the database.

The Cache mechanism will find the image next image you use that URL.




回答2:


Try to save the files on the disc, and put file paths into data base instead of inserting BLOBs into database

In another words: Your database will contain images metadata and absolute paths to files

You can do even this:

  • Create file path

  • While downloading your image append bytes to the file at this created file path ( several ways to do - manually by using NSURLConnection, or use some libs like AFHTTPConnection with NSStream attached)

  • Check if everything is OK, then put the file path string into your database or clean the file and report about error

But it is better to:

  • Download file to the temporary directory

  • Check if everything is ok, then move to the permanent directory and store file path in data base

  • Clean your temporary directory if needed

  • Clean your temporary directory regulary (By the way, iOS will clean it sometimes)




回答3:


just try with HCDownload it is a component that you use for downloading image from url. just download this class and use below code it is very easy. once your download is complete then delegate method finishedDownloadingURL is called for all images one by one then store its path (path of image where you stored) on database.

HCDownload

use this as describe below.

.h file

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

@property (nonatomic,retain) HCDownloadViewController *tblDownloadHairStyle;

.m file

@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;
}

Edit

another simple way is

ImageDownload



来源:https://stackoverflow.com/questions/16621944/downloading-images-from-server-and-saving-into-database

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!