2010-02-18 66 views
14

我有一個基於Microsoft SQL Server 2008的實體框架構建的ASP.NET MVC解決方案。我需要創建一個讓我的用戶上傳文件的函數。用實體框架將文件保存在數據庫中

我想的是:

  • 使用實體框架來將文件存儲在數據庫
  • 檢測和上傳同一文件來防止兩次通過某種哈希的溶液中而/校驗
  • 提示在數據庫/表設計

回答

10

「正確」的方式來存儲文件在SQL Server 2008數據庫是use the FILESTREAM data type。我不知道實體框架支持,但你可以嘗試看看會發生什麼。

也就是說,大多數時候人們這樣做時,他們不會將文件存儲在數據庫中。這樣做意味着您需要通過ASP.NET和數據庫服務器才能提供您可以直接從Web服務器提供的文件。它也可能會使數據庫和網站的備份圖片複雜化。所以當我們將文件上傳到我們的MVC/Entity Framework時,我們只存儲對數據庫中文件位置的引用,並將文件本身存儲在別處。

很明顯,哪種策略適合您取決於應用的具體情況。

40

在您的實體模型中,將BLOB數據庫列映射到byte[]屬性。將上傳文件的內容分配給實體對象的該屬性,並將更改保存在ObjectContext中。

要計算散列,你可以使用MD5CryptoServiceProvider

+12

該答案有什麼問題?你能否至少給出一個downvote的理由?這就是我真正討厭的一件事:那些沒有解釋就退縮的人......它太無用了 – 2010-02-18 15:39:56

+5

不知道......但是爲你的麻煩拿個+1。 :) – 2010-02-18 17:23:53

+4

這個壞的部分是,大文件可能會炸燬你的RAM通過使用字節數組而不是流:( – jocull 2014-07-30 14:34:54

5

這裏是我如何做到這一點的播客:

 

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來處理文件上傳部分。

+0

這可能是一個小應用程序可以,但假設一個複雜的應用程序需要備份和文件隨時間變化,你將無法回到特定的時間點 – ozz 2013-05-31 10:49:47

+1

@Ozz你是完全正確的;但這並不意味着隨時間變化的文件。希望是,一旦你發佈播客,你不會回去,只是覆蓋播客。 – 2013-05-31 12:25:34

相關問題