Downloading images from server and saving into Dat

2019-10-29 12:27发布

我要下载图片,并保存到我的本地数据库。 所以我存储的NSData比将其插入到本地数据库中的图像。 但也有ATLEAST 50张图片来自服务器,以便存储图像转换成的NSData,然后插入到本地数据库就花费更多的时间来了。 是否有任何解决方案,因此,这将消耗更少的时间。

请给我建议。

Answer 1:

比较常见的方式来处理从互联网上下载的图像只是它缓存到内存(NSURLCache)或磁盘(SDWebImageView)。 只有保存“图像URL”到数据库中。

缓存机制会发现您使用的URL的图片下一张图片。



Answer 2:

试着将文件保存在光盘上,并把文件路径为数据的基础上,而不是插入的BLOB到数据库

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

你可以这样做,即使这样的:

  • 创建文件路径

  • 虽然下载您的图片创建的文件路径附加字节的文件(几种方法可以做到 - 手动使用NSURLConnection的,或使用一些像库与AFHTTPConnection附NSStream)

  • 检查一切正常,然后把文件路径字符串到你的数据库或清理文件和有关错误报告

但最好是:

  • 下载文件到临时目录

  • 检查一切正常,然后移动到数据库中永久目录和存储文件路径

  • 如果需要清洁您的临时目录

  • 清洁您的临时目录regulary(顺便说一句,iOS设备有时会清理)



Answer 3:

只是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



文章来源: Downloading images from server and saving into Database