将图像路径保存到sqlite3数据库

时间:2013-01-10 13:39:43

标签: ios objective-c sqlite

我在将图像路径保存到Documents文件夹时遇到了一些麻烦,并将路径存储到我的sqlite3本地数据库中。

今天我成功地将图像作为BLOB存储到数据库中,但是在互联网上阅读,人们说不建议这样做。

所以,现在我试图在DB中存储图像路径,但是......

场合

  1. 用户点击按钮选择图像(通过UIImagePickerView)或拍摄新照片
  2. 选择图像后,将使用所选图像设置imageView。
  3. 选择器代码:

    -(void)imagePickerController:(UIImagePickerController *)pickr didFinishPickingMediaWithInfo:(NSDictionary *)info{
        UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];
        /* Test code for saving data */   
        //NSString *dir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
        //NSString *pngPath = [NSString stringWithFormat:@"%@/test.png",dir];
        //NSData *data = [NSData dataWithData:UIImagePNGRepresentation(image)];
        //[data writeToFile:pngPath atomically:YES];
    
        [imageView setImage:image];
        picture = YES;
        [pickr dismissModalViewControllerAnimated:YES];
    }
    

    现在我有几个问题

    1. 进入我的数据库,图像是BLOB类型。我应该将其编辑为TEXT吗?
    2. 如何保存路径?我的意思是,在测试代码/test.png中是一个通用的图像名称。所选图像名称是否也被保存,以便我可以检索它?或者,更好的是,如果我保存从我的图书馆中选取的名称为" IMG0001"的图像,它会保存为"测试"?
    3. 将图像保存到文档文件夹,数据库路径然后检索它的正确方法是什么?
    4. 我用Google搜索了很多答案,但经过多次试验后我放弃了。

      提前致谢

2 个答案:

答案 0 :(得分:1)

Here是关于如何在Documents目录中保存图像的很好的教程

您需要将BLOB字段转换为TEXT字段,然后只保存该图像的文件名。您还可以在Documents目录中创建文件夹,然后通过foldername / filename.png进行访问。

希望这些信息可以帮助你......

修改

以下是检查该文件夹是否退出的代码,如果不存在则创建新文件夹

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"MyFolder"];

if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]){

    NSError* error;
    if(  [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error])
        ;// success
        else
        {
            NSLog(@"[%@] ERROR: attempting to write create MyFolder directory", [self class]);
            NSAssert( FALSE, @"Failed to create directory maybe out of disk space?");
        }
}

答案 1 :(得分:0)

您无法直接访问用户照片库中的图像,因为您只能访问Applications Sandbox文件夹。

因此,如果您不想将图像存储为数据库中的blob文件,则应将图像保存在App文档文件夹内的caches文件夹中,然后将您设置的文件名存储到数据库中的图像中。

由于所有图像都将位于相同的路径文件夹中,因此您无需在数据库中实际保存整个路径,但只有文件名应足够。