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