2013-12-16 60 views
0

這是我第一次開發這種系統,其中很多概念對我來說都是非常新的。任何和所有的幫助,將不勝感激。我會盡可能有效地總結我在做什麼。使用Web服務處理文件顯示的身份驗證

背景:我有一個Web應用程序運行帶有Bootstrap的AngularJS。該應用程序通過使用C#編程的Web服務與服務器和數據庫進行通信。在該網站上,用戶可以上傳文件並稍後使用直接鏈接參考它們。沒有限制文件類型(還),所以任何事情都是允許的。

我的目標:由於文檔/圖像應該是私人數據,因此直接鏈接會給我帶來很大的安全問題。我更喜歡在單擊鏈接時驗證用戶憑據,然後使用更通用的url路徑在瀏覽器中加載文件。

--Example-- 
"mysite.com/attachments/1" ---> (Image) 
--instead of-- 
"mysite.com/data/files/importantImg.jpg" 

我在哪裏:不是很遠。我的第一個想法是添加一個頁面,它發送服務器請求並接收一個文件字節流以及我可以重新組合並呈現給用戶的MIME類型。然而,我不知道這是否可以使用發送JSON請求的Web服務,也不知道重組過程如何在客戶端工作。

就像我說的,我會採取任何和所有的建議。我很想爲未來的項目更多地瞭解這個主題,但現在我只需要指出正確的方向。

回答

0

您的第一個想法是正確的,因爲它需要使用Response object,更具體地說是AddHeaderWrite函數。當然,這將是一個只處理文件下載的不同頁面,所以它在你的JSON Web服務中將會非常好。

+0

你能提供一個代碼片段嗎?你是對的,我可以使用AddHeader來設置'Content-Disposition'這樣的東西,但是我能找到的大部分例子都是爲他們的目標文件訪問一個文件路徑。這將如何在Web服務上運行? – ThisLanham

0

我不認爲你想用Web服務來做到這一點。只需使用常規的IHttpHandler來執行驗證並返回數據。因此,您將URL「attachments/1」重寫爲「attachments/download.ashx?id = 1」。驗證訪問權限後,將數據寫入響應流。您可以使用Content Disposition標題設置文件名稱。

+0

這不是我**是否希望**使用Web服務,我的框架和項目先決條件實際上要求我。 – ThisLanham

+0

您需要將數據作爲JSON字節數組發送到瀏覽器?這是......不尋常的。 – bmm6o