Asp.Net編程實(shí)現(xiàn)下載
Asp.Net編程
經(jīng)常在論壇看見有人求Asp.Net編程實(shí)現(xiàn)下載的代碼,有些還希望能斷點(diǎn)續(xù)傳什么的。其實(shí)問題的關(guān)鍵在于權(quán)限。B/S和C/S不僅僅是外觀上的區(qū)別而已。
下載,顧名思義是客戶端要下,所以載。你硬塞給人家那不叫下載,那其實(shí)是“從服務(wù)器‘上傳’到客戶端”。
有些人的想法是向客戶端“寫一個”你打算他下載的“文件”,在C/S結(jié)構(gòu)中是沒有問題的,因?yàn)镃端來寫。但是在Asp.net卻是不行的,一定會彈出權(quán)限的錯誤,因?yàn)锽/S結(jié)構(gòu)中沒有個C端給你,S端是不可能獲得客戶機(jī)硬盤的寫權(quán)限的,要不還不是世界大亂了?
上傳和下載的根本區(qū)別在于一個是“本地主動送”,一個是“本地主動收”。他們都需要有一方來“主動”,上傳需要對遠(yuǎn)程有寫權(quán)限,下載需要對遠(yuǎn)程有讀權(quán)限。現(xiàn)在的情況是服務(wù)器根本對客戶端沒有讀寫權(quán)限,所以實(shí)際上在B/S里寫這種代碼沒有
換個思路,我不要服務(wù)器主動,我讓客戶端主動可以嗎?
1、IE的下載功能。包括Http協(xié)議中規(guī)定的下載(對IE本身無法打開的連接文件類型會提示用戶是否下載)這是最方便的,你只要給個超級連接就行了,一點(diǎn)代碼都不用。局限性在于只對“當(dāng)前IE無法打開的文件類型”有效。這就是為什么同個東西有些人點(diǎn)了打開瀏覽,有些人是提示下載,就是瀏覽器不同(包括組件、版本等)。
2、javascript主動向服務(wù)器請求文件,并由js向硬盤上寫。(本人沒嘗試過,所以到底可行與否不知道)
3、由瀏覽器以外的客戶端程序來執(zhí)行寫操作。C/S版因?yàn)橛锌蛻舳耍唵蔚暮褪裁匆粯印!!/S版里有什么是“瀏覽器以外的客戶端程序”而又是你可以訪問的??沒錯,木馬!放個木馬絕對沒問題(廢話。。)至于怎么放那就是另一方面的事情了。。。
4、讓客戶端以為這是IE的插件(這也許是,也許不是,不是你就要偽裝來騙它),這是3721等喜歡使用的方法。局限性在于和瀏覽器的設(shè)置有關(guān),如果設(shè)置關(guān)掉相應(yīng)的自動選項(xiàng),你急也沒辦法!
所以,完全用Asp.net在服務(wù)器上主觀要求客戶端“下載”,是很難以實(shí)現(xiàn)的。需要配合其他手段,以上介紹Asp.Net編程。
【編輯推薦】