(一)文件下載的概述
一、什么是文件下載
? ? 文件下載:將服務(wù)器上的一個文件还绘,通過流寫入到客戶端上
二炉擅、為什么學(xué)習(xí)文件下載
? ? 很多應(yīng)用包含有文件下載的功能
?? ?? ? 音樂的下載
?? ?? ? 應(yīng)用的下載
三扶平、文件下載的方式
1、使用超鏈接的方式實(shí)現(xiàn)文件的下載
在超鏈接
注意:超鏈接的方式渗蟹,如果瀏覽器不能識別這種格式的文件,會提示下載赞辩,如果支持該格式的文件雌芽,會直接打開(例如壓縮文件它不支持,也打不開辨嗽,就會讓你下載世落,如果是一張圖片的話,瀏覽器是支持的糟需,就會直接在頁面上顯示了)
2屉佳、通過手動編寫代碼的方式實(shí)現(xiàn)文件的下載
設(shè)置兩個頭和一個流
Content-Type:文件的MIME類型
Content-Disposition:瀏覽器支持該格式的文件時(shí),不直接打開洲押,也提示下載
設(shè)置代表該文件的輸入流武花,(因?yàn)檩敵隽魇枪潭ǖ模怯蒖esponse去生成的杈帐,就是response.getOutputStream())
(二)超鏈接方式實(shí)現(xiàn)文件下載
一体箕、代碼實(shí)現(xiàn)
二、局限性
如果瀏覽器支持這個格式的文件就會直接打開,如果不支持這個格式的文件才會提示下載
(三)手動編碼的方式實(shí)現(xiàn)文件下載
一累铅、文件下載的頁面
(四)中文文件的下載
一驶沼、中文文件的下載會出現(xiàn)亂碼問題
1、不同的瀏覽器對中文文件的下載争群,采用的編碼是不一樣的
IE瀏覽器采用的是URL編碼
Firefox瀏覽器采用的是Base64編碼
2回怜、判斷客戶端使用的瀏覽器的類型
User-Agent請求頭可以獲得客戶端瀏覽器信息
二、代碼實(shí)現(xiàn)
(五)給定目錄下的文件下載
一换薄、案例需求描述
? ? 給定一個目錄(這個目錄可以是任意盤符下的任意路徑玉雾,這個路徑下有多少級目錄、每級目錄中有多少個文件都是未知的)轻要,將這個路徑中的文件顯示到頁面上复旬,在頁面上給每個文件都提供一個響應(yīng)下載的鏈接,當(dāng)點(diǎn)擊這個鏈接的時(shí)候冲泥,對該文件進(jìn)行下載
二驹碍、案例分析
1、分析過程——樹形結(jié)構(gòu)的遍歷
(1)樹:
有且僅有一個根節(jié)點(diǎn)
在根節(jié)點(diǎn)下可以有任意個子節(jié)點(diǎn)
沒有子節(jié)點(diǎn)的節(jié)點(diǎn)稱為葉子節(jié)點(diǎn)
(2)樹形結(jié)構(gòu)的遍歷
廣度優(yōu)先遍歷1 2 3 4 5 6 7 8 9 10
廣度遞歸
廣度非遞歸
深度優(yōu)先遍歷1 2 5 10 6 3 7 4 8 9
深度遞歸
深度非遞歸
2凡恍、隊(duì)列:FIFO(先進(jìn)先出)
? ? 創(chuàng)建一個隊(duì)列
? ? 先將根節(jié)點(diǎn)入隊(duì)
? ? 將根節(jié)點(diǎn)出隊(duì)志秃,遍歷根節(jié)點(diǎn)下的所有子節(jié)點(diǎn),如果有子節(jié)點(diǎn)嚼酝,再將子節(jié)點(diǎn)入隊(duì)
? ? 依此類推
三浮还、文件列表顯示