Asp.net-Mvc

在 asp.net-mvc 中,保存使用者內容(圖像、文件等)時是否有一個好的庫或模式可以遵循

  • September 29, 2011

我的網站有一個管理部分,“作者”可以在其中上傳照片畫廊的圖片等文件,以便稍後包含在我網站的動態內容部分中。我有某些頁面,其中 html 本身儲存在我的 mySQL 數據庫中,使用者可以使用 ckeditor界面編輯內容。

我正在嘗試查看是否可以利用某些東西將文件保存到正確的目錄並稍後檢索它們,或者我應該從頭開始編寫所有這些。此外,尋找經驗教訓和要小心的事情(安全等。)

我會試一試。我們擁有的一個應用程序做了類似的事情,我們做了“自己做的事情”。使用者可以通過我們的應用程序界面上傳文件(圖像、文件等),這些文件確實具有使用者/公司/角色敏感權限。為了減輕一些安全問題和其他一些原因,我們實施了以下內容。

  1. 在 Web 應用程序中,我們創建了一個“資產”文件夾,用於儲存所有使用者生成的內容。然後,我們使用子文件夾來幫助分割內容(徽標、文件等)。
  2. 在 web.config 中,我們將這個文件夾配置為無法從瀏覽器訪問(就像 App_Data 或 bin 文件夾一樣),使用以下幾行(我們這樣做是為了確保這些文件都不能直接從瀏覽器訪問。請參閱更多關於第 4 點):
<system.webServer>
<security>
 <requestFiltering>
   <hiddenSegments>
     <add segment="Assets"/>
   </hiddenSegments>
 </requestFiltering>
</security>
  1. 上傳文件後,我們會將有關文件的相關資訊(類型、大小、名稱、評論)儲存在數據庫中。這也使我們能夠關聯文件上的角色和使用者安全資訊。
  2. 為了檢索文件,我們實現了一個帶有一組操作的控制器,該控制器獲取請求的文件名和使用者資訊(因為您必須登錄)並從 Assets 文件夾中返回文件。對於最終使用者來說,看起來所有文件都儲存在 /Files/Docs/FileID 或類似的東西中,但實際上這只是文件本身的前端“看門人”。如果您未經授權或請求錯誤文件,此控制器/操作方法將返回 404。對於文件命名,我們只生成 GUID 並將文件命名為“GUID.relevantExtension”(檢查一個不存在)

我想對於吸取的教訓或諸如此類的東西,最重要的是您不要直接公開文件,尤其是在使用者不共享內容的情況下。此外,這可能是個人喜好,如果不小心可能會引發一場戰爭,我不太喜歡在數據庫中儲存文件,因為它似乎會導致分頁和記憶體性能問題(也不是在談論 SQL 2008 文件列)。希望這可以幫助!

編輯- 關於這樣做的另一個想法,在從 VS 發佈時要注意。這些上傳的文件不是您的解決方案的一部分,如果您執行刪除上傳類型的發布,您將為您的使用者文件打蠟。只是提醒一下(去過那裡:/)

引用自:https://stackoverflow.com/questions/7208120