版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
文件的上傳和下載方立勛IT資訊交流網(wǎng)WWW.IT315.ORGTip:文件上傳概述實現(xiàn)web開發(fā)中的文件上傳功能,需完成如下二步操作:在web頁面中添加上傳輸入項在servlet中讀取上傳文件的數(shù)據(jù),并保存到本地硬盤中。如何在web頁面中添加上傳輸入項?<inputtype=“file”>標(biāo)簽用于在web頁面中添加文件上傳輸入項,設(shè)置文件上傳輸入項時須注意:1、必須要設(shè)置input輸入項的name屬性,否則瀏覽器將不會發(fā)送上傳文件的數(shù)據(jù)。2、必須把form的enctype屬值設(shè)為multipart/form-data.設(shè)置該值后,瀏覽器在上傳文件時,將把文件數(shù)據(jù)附帶在http請求消息體中,并使用MIME協(xié)議對上傳的文件進行描述,以方便接收方對上傳數(shù)據(jù)進行解析和處理。IT資訊交流網(wǎng)WWW.IT315.ORGTip:文件上傳概述如何在Servlet中讀取文件上傳數(shù)據(jù),并保存到本地硬盤中?Request對象提供了一個getInputStream方法,通過這個方法可以讀取到客戶端提交過來的數(shù)據(jù)。但由于用戶可能會同時上傳多個文件,在servlet端編程直接讀取上傳數(shù)據(jù),并分別解析出相應(yīng)的文件數(shù)據(jù)是一項非常麻煩的工作,示例。為方便用戶處理文件上傳數(shù)據(jù),Apache開源組織提供了一個用來處理表單文件上傳的一個開源組件(Commons-fileupload
),該組件性能優(yōu)異,并且其API使用極其簡單,可以讓開發(fā)人員輕松實現(xiàn)web文件上傳功能,因此在web開發(fā)中實現(xiàn)文件上傳功能,通常使用Commons-fileupload組件實現(xiàn)。使用Commons-fileupload組件實現(xiàn)文件上傳,需要導(dǎo)入該組件相應(yīng)的支撐jar包:Commons-fileupload和mons-io
不屬于文件上傳組件的開發(fā)jar文件,但Commons-fileupload
組件從1.1版本開始,它工作時需要commons-io包的支持。IT資訊交流網(wǎng)WWW.IT315.ORGIE瀏覽器上傳文件1上傳文件1普通字段WEB服務(wù)器requestServletFileupLoadDiskFileItemFactory代表普通字段的FileItem代表上傳文件1FileItem代表上傳文件2FileItemisFormFieldgetFieldNamegetStringgetInputStreamgetNamegetInputStreamgetNameIT資訊交流網(wǎng)WWW.IT315.ORGTip:核心API—DiskFileItemFactoryDiskFileItemFactory
是創(chuàng)建FileItem
對象的工廠,這個工廠類常用方法:publicvoidsetSizeThreshold(int
sizeThreshold)設(shè)置內(nèi)存緩沖區(qū)的大小,默認(rèn)值為10K。當(dāng)上傳文件大于緩沖區(qū)大小時,fileupload組件將使用臨時文件緩存上傳文件。publicvoidsetRepository(java.io.File
repository)指定臨時文件目錄,默認(rèn)值為System.getProperty("java.io.tmpdir").publicDiskFileItemFactory(int
sizeThreshold,java.io.File
repository)構(gòu)造函數(shù)IT資訊交流網(wǎng)WWW.IT315.ORGTip:核心API—ServletFileUploadServletFileUpload
負(fù)責(zé)處理上傳的文件數(shù)據(jù),并將表單中每個輸入項封裝成一個FileItem
對象中。常用方法有:boolean
isMultipartContent(HttpServletRequest
request)判斷上傳表單是否為multipart/form-data類型ListparseRequest(HttpServletRequest
request)解析request對象,并把表單中的每一個輸入項包裝成一個fileItem
對象,并返回一個保存了所有FileItem的list集合。setFileSizeMax(long
fileSizeMax)設(shè)置上傳文件的最大值setSizeMax(long
sizeMax)設(shè)置上傳文件總量的最大值setHeaderEncoding(java.lang.String
encoding)設(shè)置編碼格式setProgressListener(ProgressListener
pListener)
IT資訊交流網(wǎng)WWW.IT315.ORGTip:文件上傳案例實現(xiàn)步驟1、創(chuàng)建DiskFileItemFactory對象,設(shè)置緩沖區(qū)大小和臨時文件目錄2、使用DiskFileItemFactory
對象創(chuàng)建ServletFileUpload對象,并設(shè)置上傳文件的大小限制。3、調(diào)用ServletFileUpload.parseRequest方法解析request對象,得到一個保存了所有上傳內(nèi)容的List對象。4、對list進行迭代,每迭代一個FileItem對象,調(diào)用其isFormField方法判斷是否是上傳文件為普通表單字段,則調(diào)用getFieldName、getString方法得到字段名和字段值為上傳文件,則調(diào)用getInputStream方法得到數(shù)據(jù)輸入流,從而讀取上傳數(shù)據(jù)。編碼實現(xiàn)文件上傳IT資訊交流網(wǎng)WWW.IT315.ORGTip:多個文件上傳的javascript編碼技巧:每次動態(tài)增加一個文件上傳輸入框,都把它和刪除按紐放置在一個單獨的div中,并對刪除按紐的onclick事件進行響應(yīng),使之刪除刪除按紐所在的div。如:this.parentNode.parentNode.removeChild(this.parentNode);IT資訊交流網(wǎng)WWW.IT315.ORGTip:上傳文件的處理細(xì)節(jié)(1)中文文件亂碼問題文件名中文亂碼問題,可調(diào)用ServletUpLoader的setHeaderEncoding方法,或者設(shè)置request的setCharacterEncoding屬性
臨時文件的刪除問題由于文件大小超出DiskFileItemFactory.setSizeThreshold方法設(shè)置的內(nèi)存緩沖區(qū)的大小時,Commons-fileupload組件將使用臨時文件保存上傳數(shù)據(jù),因此在程序結(jié)束時,務(wù)必調(diào)用FileItem.delete方法刪除臨時文件。Delete方法的調(diào)用必須位于流關(guān)閉之后,否則會出現(xiàn)文件占用,而導(dǎo)致刪除失敗的情況。IT資訊交流網(wǎng)WWW.IT315.ORGTip:上傳文件的處理細(xì)節(jié)(2)文件存放位置為保證服務(wù)器安全,上傳文件應(yīng)保存在應(yīng)用程序的WEB-INF目錄下,或者不受WEB服務(wù)器管理的目錄。為防止多用戶上傳相同文件名的文件,而導(dǎo)致文件覆蓋的情況發(fā)生,文件上傳程序應(yīng)保證上傳文件具有唯一文件名。為防止單個目錄下文件過多,影響文件讀寫速度,處理上傳文件的程序應(yīng)根據(jù)可能的文件上傳總量,選擇合適的目錄結(jié)構(gòu)生成算法,將上傳文件分散存儲。IT資訊交流網(wǎng)WWW.IT315.ORGTip:上傳文件的處理細(xì)節(jié)(3)ProgressListener顯示上傳進度ProgressListener
progressListener=newProgressListener(){ publicvoidupdate(long
pBytesRead,longpContentLength,int
pItems){
System.out.println("到現(xiàn)在為止,"+pBytesRead+"字節(jié)已上傳,總大小為" +pContentLength); }};upload.setProgressListener(progressListener);以KB為單位顯示上傳進度longtemp=-1;//temp注意設(shè)置為類變量longctemp=pBytesRead/1024;if(mBytes==ctemp) return;temp=mBytes;IT資訊交流網(wǎng)WWW.IT315.ORGWeb應(yīng)用中實現(xiàn)文件下載的兩種方式超鏈接直接指向下載資源程序?qū)崿F(xiàn)下載需設(shè)置兩個響應(yīng)頭:設(shè)置Content-Type的值為:application/x-msdownload。Web服務(wù)器需要告訴瀏覽器其所輸出的內(nèi)容的類型不是普通的文本文件或HTML文件,而是一個要保存到本地的下載文件。Web服務(wù)器希望瀏覽器不直接處理相應(yīng)的實體內(nèi)容,而是由用戶選擇將相應(yīng)的實體內(nèi)容保存到一個文件中,這需要設(shè)置Content-Disposition報頭。該報頭指定了接收程序處理數(shù)據(jù)內(nèi)容的方式,在HTTP應(yīng)用中只有attachment是標(biāo)準(zhǔn)方式,attachment表示要求用戶干預(yù)。在attachment后面還可以指定filename參數(shù),該參數(shù)是服務(wù)器建議瀏覽器將實體內(nèi)容保存到文件中的文件名稱。在設(shè)置Content-Dispostion
之前一定要指定Content-Type. IT資訊交流網(wǎng)WWW.IT315.ORGTip:文件下載因為要下載的文件可以是各種類型的文件,所以要將文件傳送給客戶端,其相應(yīng)內(nèi)容應(yīng)該被當(dāng)做二進制來處理,所以應(yīng)該調(diào)用方法返回ServeltOutputStream
對象來向客戶端寫入文件內(nèi)容。IT資訊交流網(wǎng)WWW.IT315.ORGTip:下載案例遍歷上傳目錄下的所有文件顯示給用戶,并允許用戶完成下載。IT資訊交流網(wǎng)WWW.IT315.ORGTip:綜合案例privateIntegerid;privateStringname;//上傳文件的名稱,文件的uuid名privateStringrealName;//上傳文件的真實名稱privateStringpath;//記住文件的位置privateDateuptime
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐廳經(jīng)理個人工作計劃
- 個人計劃幼兒園目標(biāo)
- 關(guān)愛殘疾兒童工作計劃殘疾兒童幫扶計劃
- 出納下月工作計劃范文
- 2025~年第二學(xué)期高二化學(xué)備課組計劃
- 年小學(xué)安全教育工作計劃
- 高一美術(shù)教學(xué)工作計劃
- 有出納崗位工作計劃
- 4年終綜合管理崗位個人工作計劃范文
- 《氧氣吸入法》課件
- 2023年天津市高中物理學(xué)業(yè)水平試題真題含答案
- 高中數(shù)學(xué)-高三專題復(fù)習(xí)裂項求和教學(xué)設(shè)計學(xué)情分析教材分析課后反思
- 2021-2022學(xué)年廣東省廣州市白云區(qū)九年級(上)期末語文試卷
- 植樹問題整理與復(fù)習(xí)
- 閉門器買賣合同
- 沉井與沉管法施工-沉井法施工
- 鋁合金門窗陽臺欄桿工程施工設(shè)計方案
- 南藝 28685 設(shè)計原理考點(本科)
- 檔案格式封皮
- GB/T 41621-2022科學(xué)技術(shù)研究項目評價實施指南開發(fā)研究項目
- GB/T 9126-2008管法蘭用非金屬平墊片尺寸
評論
0/150
提交評論