我會使用的組合
例PDF文件名:23212-dd503cf8-a548-4584- a0a3-39dc8be618df.pdf
這樣,用戶就可以上傳他/她想要的任意多個文件,而不會發生文件名衝突,並且您還能夠指出哪些文件屬於哪些用戶,只需l以文件名稱打開。
我沒有看到需要在文件名中包含任何其他信息,因爲上傳時間/日期等可以從文件的屬性中檢索。
此外,您應該將文件存儲在安全位置,外部用戶(例如您的網站的訪問者)無法訪問。而是通過代理網頁將文件傳遞給他們(您從安全位置讀取文件並將數據傳遞給用戶)。對於此解決方案,需要數據庫來跟蹤文件及其位置等。
這也使您能夠控制哪些用戶可以通過您的代碼訪問哪些文件。
更新:這裏有一個如何與代理網頁的解決方案可以實現的描述。
- 名爲
GetFile.aspx
GetFile.aspx
接受名爲fileid
一個查詢參數,它是用來標識文件,以獲得創建Web窗體。例如。:http://www.mypage.com/GetFile.aspx?fileid=100
- 使用
fileid
參數來查找數據庫中的文件位置,以便它可以被讀取併發送給用戶。在Web窗體中,您使用Request.QueryString("fileid")
來獲取文件ID並將其用於看起來像這樣的查詢(SQL):SELECT FileLocation FROM UserFiles WHERE FileID = 100
- 使用
System.IO.FileStream
讀取文件並通過Response.Write
輸出其內容。請記得先使用首先設置合適的,以便客戶端瀏覽器正確處理請求的文件(請參閱asp.forums.net
上的this post和文章中也提到的MDSN article,它們都討論了自動確定適當內容類型的方法) 。
如果選擇此方法,稍後可以輕鬆實現自己的簡單安全性或自定義操作,例如確保用戶在發送文件之前登錄到您的網站,或者用戶只能訪問文件上傳他們自己,或者用戶下載哪些文件記錄等的可能性是無窮無盡;-)
你能解釋一下爲什麼? – Treb 2009-07-24 08:50:21
因爲我可以上傳一些php代碼,並且如果將它以.php擴展名保存在您的服務器上,那麼它將在我訪問它時執行。 有很多例子,當允許使用任意名稱的文件上傳時,很難想到所有訪問服務器的方法,這就是爲什麼最好不要讓任意名稱放在首位。 – FWH 2009-07-24 08:58:20