2013-01-10 66 views
1

我有一些麻烦将图像路径保存到Documents文件夹并将路径存储到我的sqlite3本地数据库。保存图像路径到sqlite3数据库

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

所以,现在我想存储在数据库映像路径,但..

形势

  1. 用户点击一个按钮来选择图像(通过UIImagePickerView)或拍摄新照片
  2. 选择图像后,imageView会随所选图像一起设置。

代码选择器:

-(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. 什么是正确的方式来保存图像到文档文件夹,其路径到数据库,然后检索它?

我搜索了很多答案,但经过很多实验后,我放弃了。

在此先感谢

回答

1

Here是如何保存图像文件目录

您需要将您的BLOB字段转换为文本字段,并只保存该图像的文件名很好的教程。您也可以在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?"); 
     } 
} 
+0

感谢您的教程链接,我几分钟前看到,我打算跟着它。感谢您指引我走上正确的道路,所以我猜对了:将BLOB转换为TEXT。 – Phillip

+0

是的,它真的非常简单和快速的文件目录保存图像,而不是sqlite数据库 –

+0

但是,正如我在下面的评论中说的,我怎么知道文件名(PNG)?我在图像选择器委托方法中做了保存工作,所以我有点困惑 – Phillip

0

你不能直接从用户的照片库访问图像,因为你只能访问你的应用程序沙箱文件夹。

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

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

+0

这是这是部分我仍然不清楚。我怎样才能保存文件名?为什么在缓存文件夹中而不是在文档中?如果我将它们保存在缓存中,并且我发布了该应用的更新,那么这些图像将被销毁? – Phillip

+0

你在问我,如何保存一个文件?如果是的话,SO中有很多话题,只是做一个搜索。至于永久存储和临时存储,请看这篇文章:http://stackoverflow.com/a/8209801/312312 – Lefteris

+0

不,我不问你如何保存文件,只是文件的名称。 – Phillip

相关问题