2013-01-10 64 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

相關問題