天天看點

關于Asp.Net中的程式設計實作下載下傳

經常在論壇看見有人求asp.net中程式設計實作下載下傳的代碼,有些還希望能斷點續傳什麼的。

其實問題的關鍵在于權限。b/s和c/s不僅僅是外觀上的差別而已。

下載下傳,顧名思義是用戶端要下,是以載。你硬塞給人家那不叫下載下傳,那其實是“從伺服器‘上傳’到用戶端”。

有些人的想法是向用戶端“寫一個”你打算他下載下傳的“檔案”,在c/s結構中是沒有問題的,因為c端來寫。但是在asp.net卻是不行的,一定會彈出權限的錯誤,因為b/s結構中沒有個c端給你,s端是不可能獲得客戶機硬碟的寫權限的,要不還不是世界大亂了?

上傳和下載下傳的根本差別在于一個是“本地主動送”,一個是“本地主動收”。他們都需要有一方來“主動”,上傳需要對遠端有寫權限,下載下傳需要對遠端有讀權限。現在的情況是伺服器根本對用戶端沒有讀寫權限,是以實際上在b/s裡寫這種代碼沒有用。

換個思路,我不要伺服器主動,我讓用戶端主動可以嗎?

1、ie的下載下傳功能。包括http協定中規定的下載下傳(對ie本身無法打開的連接配接檔案類型會提示使用者是否下載下傳)這是最友善的,你隻要給個超級連接配接就行了,一點代碼都不用。局限性在于隻對“目前ie無法打開的檔案類型”有效。這就是為什麼同個東西有些人點了打開浏覽,有些人是提示下載下傳,就是浏覽器不同(包括元件、版本等)。

2、javascript主動向伺服器請求檔案,并由js向硬碟上寫。(本人沒嘗試過,是以到底可行與否不知道)

3、由浏覽器以外的用戶端程式來執行寫操作。c/s版因為有用戶端,簡單的和什麼一樣。。。b/s版裡有什麼是“浏覽器以外的用戶端程式”而又是你可以通路的??沒錯,木馬!放個木馬絕對沒問題(廢話。。)至于怎麼放那就是另一方面的事情了。。。

4、讓用戶端以為這是ie的插件(這也許是,也許不是,不是你就要僞裝來騙它),這是3721等喜歡使用的方法。局限性在于和浏覽器的設定有關,如果設定關掉相應的自動選項,你急也沒辦法!

是以,完全用asp.net在伺服器上主觀要求用戶端“下載下傳”,是很難以實作的。需要配合其他手段

繼續閱讀