简体   繁体   中英

Downloading and saving images in iOS

I am creating an iPhone app and in that I want to download multiple image files from web service. And I want to save the images in the local folder in the app itself and save the path to each files in SQLite database. How can I implement this? Please help.

**// Get an image from the URL below**
    UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"yorimageurl"]]];

    NSLog(@"%f,%f",image.size.width,image.size.height);

    **// Let's save the file into Document folder.**

    NSString *Dir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    NSString *pngPath = [NSString stringWithFormat:@"%@/test.png",Dir];// this path if you want save reference path in sqlite 
    NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(image)];
    [data1 writeToFile:pngFilePath atomically:YES];

    NSLog(@"saving jpeg");
    NSString *jpegPath = [NSString stringWithFormat:@"%@/test.jpeg",Dir];// this path if you want save reference path in sqlite 
    NSData *data2 = [NSData dataWithData:UIImageJPEGRepresentation(image, 1.0f)];//1.0f = 100% quality
    [data2 writeToFile:jpegFilePath atomically:YES];

    NSLog(@"saving image done");

    [image release];

>> Update Additional:

You need to save image name(unique name that you can do early..right..!!) in sqlite database and you can make path or retrieve image using that name as i shown below.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,     NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent:@"test.png"];// here you jus need to pass image name that you entered when you stored it.

Hope, this will help you...

After implementing @Nit's code.. you can refer This for insert record in database.

This is showing how to insert record in DB. and for getting path read my comments in @Nit's answer.

UPDATE:

For getting path of each downloaded file you have to keep unique name for each file. Now you will have the path where you are writing file that is unique path for every file. Now you simply need to execute insert query every time you download a file or need to save filepath in array and execute query later according to your requirement. Don't forget to give different file name to every file otherwise only single file will be there and your path will be same.

For getting unique filename you can use timestamp:

NSString *fileName = [NSString stringWithFormat:@"%lf.png", [[NSDate date] timeIntervalSince1970];

UPDATE2:

You have path now like: /Users/John/Library/Application Support/iPhone Simulator/5.1/Applications/84A837AA-7881-4D99-B6E2-623DC9A2E5D3/Documents/test.png

For getting Image in Image view:

UIImage *img = [UIImage imageWithContentsOfFile:yourPath];
//[UIImage imageWithData:[NSData dataWithContentsOfFile:yourPath]];
UIImageView *imgView = // Alloc + Init + Setting frame etc
imgView.image = img;

This will show image in your imageview

Hope this helps

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM