2012-01-03 28 views
3

我正在爲基本照片庫的數據庫設計,每個用戶可以上傳幾個圖像。用戶照片庫MySQL設計

現在這裏是我有:

photo_gallery

photo_id - image    - sort_order - user_id 
1  - test.jpg   - 1   - 1 
2  - another_photo.jpg - 2   - 1 

,然後在我的文件夾結構,我會創造像這樣一個新的文件夾: 圖片/照片畫廊/並將圖像存儲在那裏。現在,我應該創建一個文件夾的每個USER_ID和存儲其特定的圖像文件夾中/

在這種情況下

所以: 圖片/照片畫廊/ 1/test.jpg放在和所有的用戶1的照片會那裏?

此外,爲了重新調整尺寸,我正在考慮使用smart image resizer,因此我只能存儲原始照片,並且如果我想將其調整到一定的大小,我可以使用如下腳本調用它:/ image。 php?width = 200 & height = 200 & image = test.jpg。

我應該散列這些文件名嗎?我錯過了什麼嗎?有關如何改善這一點的任何建議?

謝謝!

回答

4

現在,我應該爲每個user_id創建一個文件夾並將其特定圖像存儲在該文件夾中?

是的,它會以某種方式讓你不用一個目錄拿着文件數以萬計的最終分離上傳一個好主意。您可以通過用戶名,首字母(例如images/t/te/test.jpg)或散列(例如images/0e/0e4fab12.jpg)將它們分開。


我應該散列這些文件名?

這取決於你想要完成什麼。既然你打算指文件名的URL,可以存儲文件名與一組已知的「安全」的字符可以是一個優勢:

image.php?image=c/ca/cat%20farting%20On%20a%20lemon.jpg 
-- vs -- 
image.php?image=0a/0a1b2c3d.jpg 

如果你這樣做,不過,我會建議延長你數據庫模式,包括原始文件名:

photo_id | image   | orig_fn   | sort_order | user_id 
1  | 0a/0a1b2c3d.jpg | charginLazors.jpg | 1   | 2 

你也可以考慮存儲額外的元數據對圖像,如上傳日期,標題,等等。


關於文件夾結構,你可以使用任何數目的字符從文件名,但也有一些事情要考慮:

使用可創建十六進制文件名散列方法意味着你的子文件夾的最大數量是16的倍數:

  • 一個字符— 16子文件夾
  • 兩個字符— 256的子文件夾
  • 三個字符— 4096子

如果使用兩個以上的字,我建議進一步嵌套的文件夾:0a/0a12/0a12bd31.jpg- 或 -0a/12/0a12bd31.jpg。這使得導航/管理文件有點更易於管理(IMO)

請記住,您使用更前綴字符,少文件將每個文件夾中。如果您預期音量較高,則可以選擇使用每個文件夾的文件較少的文件夾。

+0

這是一個很好的答案。我只是想強調文件名/文件路徑重複的可能性。如果有用戶會上傳相同名稱的圖像或用戶將上傳相同的圖像(在你立足於圖像本身的哈希文件名的情況下),你需要確保你」的任何可能性首先檢查重複(file_exists())並以某種方式處理它。您也可以將mysql photo_id追加到文件末尾('_')。photo_id)以保持其獨特性,並可能將其用作未來的識別捷徑。 – 2012-01-03 17:42:52

+0

感謝您的一個很好的答案。只是幾個問題。爲了存儲路徑,是不是最好將它存儲爲:0a/0a1b2c3d.jpg而不是包含圖像文件夾,以防萬一我改變它?在這種情況下,用於存儲原始文件名的好處是什麼? – Drew 2012-01-03 18:14:05

+0

@德魯:很好。是的,將圖像路徑存儲在相對於圖像根路徑(您可以在配置文件中設置)的路徑中會更好。我會修改答案。關於原始文件名,這實際上取決於畫廊的目的。如果用戶查看圖像的原始文件名(或者以其原始名稱而非表面上隨機的名稱下載圖像)對用戶有用,則將其包括在內。如果文件名不相關,請跳過它。這就是構建自己的系統的美妙之處:您可以完美地使其適合您的預期用途。 – 2012-01-03 18:45:48

0

現在,我應該爲每個文件夾user_id說明

這是一個非常好的解決方案,另一種可能性是每年創造一個文件夾,並最終每月根據一個目標數量的照片。 對於照片文件名,我建議使用數據庫ID,這將使您遠離字符編碼問題,並最終將原始名稱保留在數據庫中。

也爲調整大小,我在想使用智能圖像縮放

對於我的觀點,除非你需要保持完整大小的圖片,我建議存儲調整大小的照片。好處如下:您可以存儲更多照片,您可以更快速地發送照片,照片導航將更具反應性。

我缺少什麼嗎?

那麼也許這種用戶權限可能會影響你存儲圖像的方式。

,關於如何提高這有什麼建議?

我工作的這些想法,並創建了一個攝影博客,你可以找到here它是開源的可以隨意扔在PHP和JavaScript源代碼看看。