2011-12-26 98 views
5

我使用的是asp.net mvc,並有一個用戶可以上傳圖片的部分。我想知道我應該在哪裏存儲它們。我應該將上傳的(img文件)保存到App_Data嗎?

我跟着this tutorial,他似乎把它存儲在app_data中。然而,我讀過另一個人說,它應該只保存你的數據庫。

所以不知道使用app_data有什麼好處。我在共享主機上,所以我不知道這是否有所作爲。

編輯

我計劃的路徑存儲在數據庫中的圖像。然後,我將在圖像標記中使用它們,並在它們到達我的網站時將它們呈現給用戶。我有一個文件上傳器,只會預期圖像(檢查將客戶端和服務器)

+0

將圖像內容存儲在數據庫中的文件系統和圖像路徑中。爲什麼?閱讀[本文](http:// stackoverflow。com/questions/561447/store-pictures-as-files-or-in-the-database-for-a-web-app) –

+0

小評論:如果你將來需要橫向擴展,將上傳的內容存儲在Web服務器上的文件夾將成爲問題。如果您擔心這一點,請考慮使用Azure Blob存儲,亞馬遜簡單存儲或甚至數據庫等服務,如以下某些答案所示。 – santiagoIT

回答

4

該教程是一個簡單的例子 - 如果你閱讀評論,原始代碼只是保存到uploads目錄,沒有app_data在眼前。

它被更改爲app_data,因爲這是一個特殊的文件夾 - 不允許執行代碼。

而你已經理解正確 - app_data真的存在基於文件的數據庫。這是該文件夾的含義。因爲這樣將圖像保存到其中並不覺得是正確的。

如果您確定只有圖片上傳(並且您控制了該圖片),我會建議您使用/uploads目錄 - 圖片的保留位置也不允許執行代碼(您應該可以通過IIS控制某些內容)。

+0

上傳是一個特殊的文件夾還是您剛創建的? – chobo2

+0

@ chobo2 - 就像我之前提到的那樣,因爲它最初是在您鏈接的文章中完成的。 – Oded

+0

我不知道我在IIS上有多少控制,因爲我說我正在使用共享主機。我將在數據庫中存儲相對路徑,然後獲取將在img標記中使用的完整路徑。所以我不確定這是否代碼執行。 – chobo2

1

我想說,這取決於你將在隨後的圖像做什麼。如果您在img標籤中使用這些圖片,則可以將它們保存在內容/文件夾結構中的某個位置。

如果您不需要從外部訪問它們,或者需要將它們改回來,則可以將它們存儲在Web根目錄下,如果主機允許的話。

我不會將它們存儲在app_data中,因爲我個人認爲它更像是一個存儲數據庫的約定。大多數不熟悉該產品的開發人員不會在圖像中尋找。

但是:您可以將二進制文件存儲在數據庫中(即使這可能不是最好的做法),所以指向同一目錄中的文件的數據庫中的引用再次有意義。

雖然我覺得這不僅僅是一個技術問題,而是一個意見。

0

我寧願將它們存儲在數據庫中。在文件系統上存儲圖像時,我發現管理它們會有點困難。使用數據庫,您可以快速重命名文件,刪除文件,複製文件等。您可以在文件系統上執行相同的操作,但需要一些腳本知識。

另外我更喜歡不管理路徑和文件位置,這是對數據庫的另一次投票。這些路徑值總是進入web.config,並且可能變得更難以部署和管理。

+1

理想情況下存儲在數據庫中的唯一時間是使用映射到文件系統的SQL文件類型。性能影響在你不知道的時候是衆所周知的。 –

相關問題