2016-01-04 57 views
0

我想從一個asp.net網站接收文件,但我想在向客戶端提供文件之前用數據庫中的數據驗證請求。Asp.net C#自定義文件處理程序

對於圖像,我會使用標準的HTML圖像標記像這樣加載:

'<img src="/Uploads/RANDOMGUID/img.aspx" alt="The Moon" title="The Moon"> 

的請求將其映射到一個字段在數據庫中存儲的圖像的路徑有一個隨機的GUID。

我想有一個入口點的所有請求,這可能是一個ASPX或ashx的頁面,例如[除非有更好的辦法],這會又:

  • 解析GUID出請求路徑的
  • 驗證是否請求者使用數據庫中的數據
  • 返回一個錯誤圖像訪問請求的圖像或文件,或者未授權的
  • 如果授權返回文件內容,文件和設置內容類型

我應該如何實現這樣的功能?我是否需要一個在aspx文件中處理的站點範圍文件擴展名並返回一個自定義文件內容類型?

回答

1

首先,將圖像文件放入用戶不能直接訪問的目錄中。 然後改變這樣的路徑: <img src="/Uploads/img.aspx?id=RANDOMGUID" alt="The Moon" title="The Moon"> 這樣,你可以從Request.QueryString [「id」]獲得ID並進行檢查。 它比你想要的路徑容易得多,因爲它總是會和aspx頁面一樣。有了原始路徑,你將不得不做路徑映射,並且不需要你的生活變得複雜。

簽入數據庫後,您可以使用Response.WriteFile發送適當的文件。詳情請查詢https://msdn.microsoft.com/en-us/library/dyfzssz9%28v=vs.110%29.aspx

編輯:這是關於獲取圖像的ID。正如@mason指出的那樣,您應該註冊處理程序並使用.ashx擴展名,因爲您並不需要查看。

+0

您不應該爲此使用ASPX,因爲不需要視圖。使用ASHX通用處理程序,或在web.config中註冊新的處理程序。 – mason

+0

我完全同意。我編輯了這個附加信息的答案。謝謝。 – Shadowed

+0

我讀過的內容似乎暗示這違背了RFC的規定,可能導致緩存問題。這是一件值得關注的事嗎?它是我建議在路徑中使用GUID的原因之一。 – Dizzle