2010-03-17 101 views
1

我需要一個地方來存儲圖像。我的第一個想法是使用數據庫,但是many seems to recommend using the filesystem。這似乎符合我的情況,但我該如何實施?從文件系統而不是數據庫中存儲和檢索圖像

文件名必須是唯一的,如何做到這一點。我應該使用guid嗎?

如何檢索文件,我應該直接去數據庫中使用的文件名,做一個aspx頁面並通過任一文件名或主鍵作爲查詢字符串,然後讀取該文件。

什麼客戶端緩存,是使用像image.aspx頁?ID = 123時,啓用?

如何刪除相關記錄被刪除時的文件?

我想有,我還沒有想過許多其他的事情。

鏈接,樣本和指導方針非常受歡迎!

回答

1

Uploading Files in ASP.NET 2.0

您在如何做到這一點的空氣似乎了,所以我給你一些想法,讓你去。

如果你想使用的文件系統確保你知道有多少文件每個目錄是允許的極限,所以你可以設置創建子目錄的系統。 http://ask-leo.com/is_there_a_limit_to_what_a_single_folder_or_directory_can_hold.html

我會做一個表是這樣的:

FileUpload 
UploadID   int identity/auto generate PK, used as FK in other tables 
InternalFileName string 
DisplayFileName string 
Comment   string 
MimeType   string 
FileSizeBytes  int 
FileHash   string MD5 Hash of a File 
UploadUserID  int FK to UserID 
UploadDate  date 

您將包括UPLOADID在「擁有」此上載,喜歡與它相關聯的順序表等您可以添加InternalDirectory列,但我更喜歡根據常量Root值+某個關鍵特定值來計算此值。例如,完整的文件名和目錄是:

Constant_Root +「\」 +訂單id +「\」 + InternalFileName

你可以使InternalFileName是UPLOADID並從原始文件的擴展名。這樣它將是唯一的,但您必須將該行作爲進程的第一部分插入,並在知道文件名和標識/自動生成行值之後對其進行更新。您可以使InternalFileName類似於YYYMMDDhhmissmmm和原始文件的文件擴展名,根據您使用子目錄的方式可能足夠獨特。

我喜歡存儲MD5 Hash of a File這使得檢測重複容易。

Mime類型和FileSizeBytes可以從文件系統中找到,但如果你把它們存儲在數據庫中,這讓一些保養容易,因爲你可以查詢大型文件或某些類型的文件。

相關問題