我有一個基於Microsoft SQL Server 2008的實體框架構建的ASP.NET MVC解決方案。我需要創建一個讓我的用戶上傳文件的函數。用實體框架將文件保存在數據庫中
我想的是:
- 使用實體框架來將文件存儲在數據庫
- 檢測和上傳同一文件來防止兩次通過某種哈希的溶液中而/校驗
- 提示在數據庫/表設計
我有一個基於Microsoft SQL Server 2008的實體框架構建的ASP.NET MVC解決方案。我需要創建一個讓我的用戶上傳文件的函數。用實體框架將文件保存在數據庫中
我想的是:
「正確」的方式來存儲文件在SQL Server 2008數據庫是use the FILESTREAM data type。我不知道實體框架支持,但你可以嘗試看看會發生什麼。
也就是說,大多數時候人們這樣做時,他們不會將文件存儲在數據庫中。這樣做意味着您需要通過ASP.NET和數據庫服務器才能提供您可以直接從Web服務器提供的文件。它也可能會使數據庫和網站的備份圖片複雜化。所以當我們將文件上傳到我們的MVC/Entity Framework時,我們只存儲對數據庫中文件位置的引用,並將文件本身存儲在別處。
很明顯,哪種策略適合您取決於應用的具體情況。
在您的實體模型中,將BLOB數據庫列映射到byte[]
屬性。將上傳文件的內容分配給實體對象的該屬性,並將更改保存在ObjectContext
中。
要計算散列,你可以使用MD5CryptoServiceProvider
類
這裏是我如何做到這一點的播客:
ID Title Path Summary UploadDate --- ----- -------- ---------------- ----------- 1 TestPodcast /Podcasts/ep1.mp3 A test podcast 2010-02-12
的path
商店播客的物理位置的參考。我使用了Scott Hanselman的一篇文章File Uploads with ASP.NET MVC來處理文件上傳部分。
這可能是一個小應用程序可以,但假設一個複雜的應用程序需要備份和文件隨時間變化,你將無法回到特定的時間點 – ozz 2013-05-31 10:49:47
@Ozz你是完全正確的;但這並不意味着隨時間變化的文件。希望是,一旦你發佈播客,你不會回去,只是覆蓋播客。 – 2013-05-31 12:25:34
該答案有什麼問題?你能否至少給出一個downvote的理由?這就是我真正討厭的一件事:那些沒有解釋就退縮的人......它太無用了 – 2010-02-18 15:39:56
不知道......但是爲你的麻煩拿個+1。 :) – 2010-02-18 17:23:53
這個壞的部分是,大文件可能會炸燬你的RAM通過使用字節數組而不是流:( – jocull 2014-07-30 14:34:54