版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 文件的上傳和下載文件的上傳和下載袁杰袁杰高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 TipTip:文件上傳概述:文件上傳概述l實(shí)現(xiàn)web開發(fā)中的文件上傳功能,需完成如下二步操作:在web頁面中添加上傳輸入項(xiàng)在servlet中讀取上傳文件的數(shù)據(jù),并保存到本地硬盤中。l如何在web頁面中添加上傳輸入項(xiàng)?標(biāo)簽用于在web頁面中添加文件上傳輸入項(xiàng),設(shè)置文件上傳輸入項(xiàng)時(shí)須注意:1、必須要設(shè)置input輸入項(xiàng)的name屬性,否則瀏覽器將不會(huì)發(fā)送上傳文件的數(shù)據(jù)。、必須把form的enctype屬值設(shè)為mult
2、ipart/form-datamultipart/form-data.method.method 屬性設(shè)置為post方式。設(shè)置該值后,瀏覽器在上傳文件時(shí),將把文件數(shù)據(jù)附帶在http請(qǐng)求消息體中,并使用協(xié)議對(duì)上傳的文件進(jìn)行描述,以方便接收方對(duì)上傳數(shù)據(jù)進(jìn)行解析和處理。高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 TipTip:文件上傳概述文件上傳概述l如何在Servlet中讀取文件上傳數(shù)據(jù),并保存到本地硬盤中?Request對(duì)象提供了一個(gè)getInputStream方法,通過這個(gè)方法可以讀取到客戶端提交過來的數(shù)據(jù)。但由于用戶可能會(huì)同時(shí)上傳多個(gè)文件,在servlet端編程直
3、接讀取上傳數(shù)據(jù),并分別解析出相應(yīng)的文件數(shù)據(jù)是一項(xiàng)非常麻煩的工作,示例。為方便用戶處理文件上傳數(shù)據(jù),Apache 開源組織提供了一個(gè)用來處理表單文件上傳的一個(gè)開源組件( Commons-fileupload ),該組件性能優(yōu)異,并且其API使用極其簡(jiǎn)單,可以讓開發(fā)人員輕松實(shí)現(xiàn)web文件上傳功能,因此在web開發(fā)中實(shí)現(xiàn)文件上傳功能,通常使用Commons-fileupload組件實(shí)現(xiàn)。l使用Commons-fileupload組件實(shí)現(xiàn)文件上傳,需要導(dǎo)入該組件相應(yīng)的支撐jar包:Commons-fileupload和mons-io 不屬于文件上傳組件的開發(fā)jar文件,但C
4、ommons-fileupload 組件從1.1 版本開始,它工作時(shí)需要commons-io包的支持。高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 TipTip:fileuploadfileupload組件工作流程組件工作流程IE瀏覽器上傳文件上傳文件2普通字段WEB服務(wù)器requestServletFileupLoadDiskFileItemFactory代表普通字段的代表普通字段的FileItem代表上傳文件代表上傳文件 FileItem代表上傳文件代表上傳文件 FileItemisFormFieldgetFieldNamegetStringgetInputStr
5、eamgetNamegetInputStreamgetName高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 TipTip:核心:核心APIDiskFileItemFactoryAPIDiskFileItemFactorylDiskFileItemFactory 是創(chuàng)建 FileItem 對(duì)象的工廠,這個(gè)工廠類常用方法:public DiskFileItemFactory(int sizeThreshold, java.io.File repository) 構(gòu)造函數(shù) public void setSizeThreshold(int sizeThreshold) 設(shè)置內(nèi)
6、存緩沖區(qū)的大小,默認(rèn)值為10K。當(dāng)上傳文件大于緩沖區(qū)大小時(shí), fileupload組件將使用臨時(shí)文件緩存上傳文件。public void setRepository(java.io.File repository) 指定臨時(shí)文件目錄,默認(rèn)值為System.getProperty(java.io.tmpdir).高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 TipTip:核心:核心APIServletFileUploadAPIServletFileUploadlServletFileUpload 負(fù)責(zé)處理上傳的文件數(shù)據(jù),并將表單中每個(gè)輸入項(xiàng)封裝成一個(gè) FileItem
7、對(duì)象中。常用方法有:boolean isMultipartContent(HttpServletRequest request) 判斷上傳表單是否為multipart/form-data類型List parseRequest(HttpServletRequest request)解析request對(duì)象,并把表單中的每一個(gè)輸入項(xiàng)包裝成一個(gè)fileItem 對(duì)象,并返回一個(gè)保存了所有FileItem的list集合。 setFileSizeMax(long fileSizeMax) 設(shè)置上傳文件的最大值setSizeMax(long sizeMax) 設(shè)置上傳文件總量的最大值setHeaderEnc
8、oding(java.lang.String encoding) 設(shè)置編碼格式setProgressListener(ProgressListener pListener) 高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 TipTip:文件上傳案例:文件上傳案例l實(shí)現(xiàn)步驟實(shí)現(xiàn)步驟、創(chuàng)建DiskFileItemFactory對(duì)象,設(shè)置緩沖區(qū)大小和臨時(shí)文件目錄、使用DiskFileItemFactory 對(duì)象創(chuàng)建ServletFileUpload對(duì)象,并設(shè)置上傳文件的大小限制。、調(diào)用ServletFileUpload.parseRequest方法解析request對(duì)象,得到
9、一個(gè)保存了所有上傳內(nèi)容的List對(duì)象。、對(duì)list進(jìn)行迭代,每迭代一個(gè)FileItem對(duì)象,調(diào)用其isFormField方法判斷是否是上傳文件為普通表單字段,則調(diào)用getFieldName、getString方法得到字段名和字段值為上傳文件,則調(diào)用getInputStream方法得到數(shù)據(jù)輸入流,從而讀取上傳數(shù)據(jù)。l編碼實(shí)現(xiàn)文件上傳編碼實(shí)現(xiàn)文件上傳高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 TipTip:多個(gè)文件上傳的:多個(gè)文件上傳的javascriptjavascript編碼編碼l技巧:每次動(dòng)態(tài)增加一個(gè)文件上傳輸入框,都把它和刪除按紐放置在一個(gè)單獨(dú)的div中,并對(duì)刪
10、除按紐的onclick事件進(jìn)行響應(yīng),使之刪除刪除按紐所在的div。如:this.parentNode.parentNode.removeChild(this.parentNode);高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 TipTip:上傳文件的處理細(xì)節(jié):上傳文件的處理細(xì)節(jié)(1)(1)l中文文件亂碼問題文件名中文亂碼問題,可調(diào)用ServletUpLoader的setHeaderEncoding方法,或者設(shè)置request的setCharacterEncoding屬性 l臨時(shí)文件的刪除問題由于文件大小超出DiskFileItemFactory.setSizeThr
11、eshold方法設(shè)置的內(nèi)存緩沖區(qū)的大小時(shí),Commons-fileupload組件將使用臨時(shí)文件保存上傳數(shù)據(jù),因此在程序結(jié)束時(shí),務(wù)必調(diào)用FileItem.delete方法刪除臨時(shí)文件。Delete方法的調(diào)用必須位于流關(guān)閉之后,否則會(huì)出現(xiàn)文件占用,而導(dǎo)致刪除失敗的情況。高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 TipTip:上傳文件的處理細(xì)節(jié):上傳文件的處理細(xì)節(jié)(2)(2)l文件存放位置為保證服務(wù)器安全,上傳文件應(yīng)保存在應(yīng)用程序的WEB-INF目錄下,或者不受WEB服務(wù)器管理的目錄。為防止多用戶上傳相同文件名的文件,而導(dǎo)致文件覆蓋的情況發(fā)生,文件上傳程序應(yīng)保證上傳文
12、件具有唯一文件名。為防止單個(gè)目錄下文件過多,影響文件讀寫速度,處理上傳文件的程序應(yīng)根據(jù)可能的文件上傳總量,選擇合適的目錄結(jié)構(gòu)生成算法,將上傳文件分散存儲(chǔ)。高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 TipTip:上傳文件的處理細(xì)節(jié):上傳文件的處理細(xì)節(jié)(3)(3)lProgressListener顯示上傳進(jìn)度ProgressListener progressListener = new ProgressListener() public void update(long pBytesRead, long pContentLength, int pItems) Syst
13、em.out.println(到現(xiàn)在為止, + pBytesRead + 字節(jié)已上傳,總大小為 + pContentLength);upload.setProgressListener(progressListener);l以KB為單位顯示上傳進(jìn)度long temp = -1; /temp注意設(shè)置為類變量long ctemp = pBytesRead /1024; if (mBytes = ctemp) return; temp = mBytes; 高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 TipTip:文件下載:文件下載lWeb應(yīng)用中實(shí)現(xiàn)文件下載的兩種方式超鏈接
14、直接指向下載資源程序?qū)崿F(xiàn)下載需設(shè)置兩個(gè)響應(yīng)頭:設(shè)置Content-Type 的值為:application/x-msdownload。Web 服務(wù)器需要告訴瀏覽器其所輸出的內(nèi)容的類型服務(wù)器需要告訴瀏覽器其所輸出的內(nèi)容的類型不是普通的文本文件或 HTML 文件,而是一個(gè)要保存到本地的下載文件而是一個(gè)要保存到本地的下載文件。Web 服務(wù)器希望服務(wù)器希望瀏覽器不直接處理相應(yīng)的實(shí)體內(nèi)容實(shí)體內(nèi)容,而是由用戶由用戶選擇將相應(yīng)的實(shí)體內(nèi)容保存到一個(gè)文件中選擇將相應(yīng)的實(shí)體內(nèi)容保存到一個(gè)文件中,這需要設(shè)置需要設(shè)置 Content-Disposition 報(bào)頭報(bào)頭。該報(bào)頭指定了接收程序處理數(shù)據(jù)內(nèi)容的方式,在 HTT
15、P 應(yīng)用中只有只有 attachment 是標(biāo)準(zhǔn)方式是標(biāo)準(zhǔn)方式,attachment 表示要求用戶干預(yù)。在 attachment 后面還可以指定 filename 參數(shù),該參數(shù)是服務(wù)器建議瀏覽器將實(shí)體內(nèi)容保存到文件中的文件名稱瀏覽器將實(shí)體內(nèi)容保存到文件中的文件名稱。在設(shè)置 Content-Dispostion 之前一定要指定 Content-Type.高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 TipTip:文件下載:文件下載l因?yàn)橐螺d的文件可以是各種類型的文件,所以要將文件傳送給客戶端,其相應(yīng)內(nèi)容應(yīng)該被當(dāng)做二進(jìn)制來處理,所以應(yīng)該調(diào)用 方法返回 ServeltOutputStream 對(duì)象來向客戶端寫入文件內(nèi)容。 高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 TipTip:下載案例:下載案例l遍歷上傳目錄下的所有文件顯示給用戶,并允許用戶完成下載。高級(jí)軟件人才實(shí)作培訓(xùn)專家高級(jí)軟件人才實(shí)作培訓(xùn)專家! !北京傳智播客教育 TipTip:綜合案例:綜合案例private String id;private String savename; /上傳文件的名稱,文件的uuid名private String realName; /上傳文件的真實(shí)名稱private String savepa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年教育機(jī)構(gòu)校園宣傳欄設(shè)施采購(gòu)及安裝合同3篇
- 二零二五年度木材防腐處理木工班組承包合同樣本4篇
- 2025年食堂食材安全認(rèn)證與采購(gòu)合同3篇
- 2025版家居建材行紀(jì)合同范本2篇
- 第八章生命體征的評(píng)估與護(hù)理護(hù)理學(xué)基礎(chǔ)88課件講解
- 2025年保潔防疫服務(wù)協(xié)議
- 2025年加盟連鎖店經(jīng)銷合作協(xié)議范例
- 2025年大型綜合市場(chǎng)用水電合同
- 2025年專利知識(shí)產(chǎn)權(quán)技術(shù)權(quán)利使用許可轉(zhuǎn)讓合同
- 二零二五版閉門會(huì)議知識(shí)產(chǎn)權(quán)授權(quán)與保密條款合同3篇
- 2024年萍鄉(xiāng)衛(wèi)生職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)標(biāo)準(zhǔn)卷
- 2024年高考數(shù)學(xué)(理)試卷(全國(guó)甲卷)(空白卷)
- DB32-T 4444-2023 單位消防安全管理規(guī)范
- 臨床三基考試題庫(kù)(附答案)
- 合同簽訂執(zhí)行風(fēng)險(xiǎn)管控培訓(xùn)
- 九宮數(shù)獨(dú)200題(附答案全)
- 人員密集場(chǎng)所消防安全管理培訓(xùn)
- JCT587-2012 玻璃纖維纏繞增強(qiáng)熱固性樹脂耐腐蝕立式貯罐
- 典范英語2b課文電子書
- 員工信息登記表(標(biāo)準(zhǔn)版)
- 春節(jié)工地停工復(fù)工計(jì)劃安排( 共10篇)
評(píng)論
0/150
提交評(píng)論