亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Apache FileUpload文件上傳組件API解析

2019-11-11 05:13:42
字體:
來源:轉載
供稿:網友

Apache FileUpload文件上傳組件API解析

文章來源:http://java.chinaitlab.com/net/822353.htmlJava Web開發人員可以使用Apache文件上傳組件來接收瀏覽器上傳的文件,該組件由多個類共同組成,但是,對于使用該組件來編寫文件上傳功能的Java Web開發人員來說,只需要了解和使用其中的三個類:DiskFileUpload、FileItem和FileUploadException。這三個類全部位于org.apache.commons.fileupload包中?! ?. DiskFileUpload類  DiskFileUpload類是Apache文件上傳組件的核心類,應用程序開發人員通過這個類來與Apache文件上傳組件進行交互。但現在Apache建議使用ServletFileUpload類,兩個類的方法類似。下面介紹DiskFileUpload類中的幾個常用的重要方法?! ?.1.setSizeMax方法  setSizeMax方法用于設置請求消息實體內容的最大允許大小,以防止客戶端故意通過上傳特大的文件來塞滿服務器端的存儲空間,單位為字節。其完整語法定義如下:  public void setSizeMax(long sizeMax)  如果請求消息中的實體內容的大小超過了setSizeMax方法的設置值,該方法將會拋出FileUploadException異常?! ?.2.setSizeThreshold方法  Apache文件上傳組件在解析和處理上傳數據中的每個字段內容時,需要臨時保存解析出的數據。因為Java虛擬機默認可以使用的內存空間是有限的(筆者測試不大于100M),超出限制時將會發生“java.lang.OutOfMemoryError”錯誤,如果上傳的文件很大,例如上傳800M的文件,在內存中將無法保存該文件內容,Apache文件上傳組件將用臨時文件來保存這些數據;但如果上傳的文件很小,例如上傳600個字節的文件,顯然將其直接保存在內存中更加有效。setSizeThreshold方法用于設置是否使用臨時文件保存解析出的數據的那個臨界值,該方法傳入的參數的單位是字節。其完整語法定義如下:  public void setSizeThreshold(int sizeThreshold)  1.3. setRepositoryPath方法  setRepositoryPath方法用于設置setSizeThreshold方法中提到的臨時文件的存放目錄,這里要求使用絕對路徑。其完整語法定義如下:  public void setRepositoryPath(String repositoryPath)  如果不設置存放路徑,那么臨時文件將被儲存在"java.io.tmpdir"這個JVM環境屬性所指定的目錄中,tomcat 5.5.9將這個屬性設置為了“<tomcat安裝目錄>/temp/”目錄?! ?.4. parseRequest方法  parseRequest 方法是DiskFileUpload類的重要方法,它是對HTTP請求消息進行解析的入口方法,如果請求消息中的實體內容的類型不是“multipart/form-data”,該方法將拋出FileUploadException異常。parseRequest 方法解析出FORM表單中的每個字段的數據,并將它們分別包裝成獨立的FileItem對象,然后將這些FileItem對象加入進一個List類型的集合對象中返回。parseRequest 方法的完整語法定義如下:  public List parseRequest(HttpServletRequest req)  parseRequest 方法還有一個重載方法,該方法集中處理上述所有方法的功能,其完整語法定義如下:  parseRequest(HttpServletRequest req,int sizeThreshold,long sizeMax,  String path)  這兩個parseRequest方法都會拋出FileUploadException異常?! ?.5. isMultipartContent方法  isMultipartContent方法方法用于判斷請求消息中的內容是否是“multipart/form-data”類型,是則返回true,否則返回false。isMultipartContent方法是一個靜態方法,不用創建DiskFileUpload類的實例對象即可被調用,其完整語法定義如下:  public static final boolean isMultipartContent(HttpServletRequest req)  1.6. setHeaderEncoding方法  由于瀏覽器在提交FORM表單時,會將普通表單中填寫的文本內容傳遞給服務器,對于文件上傳字段,除了傳遞原始的文件內容外,還要傳遞其文件路徑名等信息,如后面的圖1.3所示。不管FORM表單采用的是“application/x-www-form-urlencoded”編碼,還是“multipart/form-data”編碼,它們僅僅是將各個FORM表單字段元素內容組織到一起的一種格式,而這些內容又是由某種字符集編碼來表示的。關于瀏覽器采用何種字符集來編碼FORM表單字段中的內容,請參看筆者編著的《深入體驗java Web開發內幕——核心基礎》一書中的第6.9.2的講解,“multipart/form-data”類型的表單為表單字段內容選擇字符集編碼的原理和方式與“application/x-www-form-urlencoded”類型的表單是相同的。FORM表單中填寫的文本內容和文件上傳字段中的文件路徑名在內存中就是它們的某種字符集編碼的字節數組形式,Apache文件上傳組件在讀取這些內容時,必須知道它們所采用的字符集編碼,才能將它們轉換成正確的字符文本返回。  對于瀏覽器上傳給WEB服務器的各個表單字段的描述頭內容,Apache文件上傳組件都需要將它們轉換成字符串形式返回,setHeaderEncoding 方法用于設置轉換時所使用的字符集編碼,其原理與筆者編著的《深入體驗java Web開發內幕——核心基礎》一書中的第6.9.4節講解的ServletRequest.setCharacterEncoding方法相同。setHeaderEncoding 方法的完整語法定義如下:  public void setHeaderEncoding(String encoding)  其中,encoding參數用于指定將各個表單字段的描述頭內容轉換成字符串時所使用的字符集編碼?! ∽⒁猓喝绻x者在使用Apache文件上傳組件時遇到了中文字符的亂碼問題,一般都是沒有正確調用setHeaderEncoding方法的原因?! ?.  FileItem類  FileItem類用來封裝單個表單字段元素的數據,一個表單字段元素對應一個FileItem對象,通過調用FileItem對象的方法可以獲得相關表單字段元素的數據。FileItem是一個接口,在應用程序中使用的實際上是該接口一個實現類,該實現類的名稱并不重要,程序可以采用FileItem接口類型來對它進行引用和訪問,為了便于講解,這里將FileItem實現類稱之為FileItem類。FileItem類還實現了Serializable接口,以支持序列化操作?! τ凇癿ultipart/form-data”類型的FORM表單,瀏覽器上傳的實體內容中的每個表單字段元素的數據之間用字段分隔界線進行分割,兩個分隔界線間的內容稱為一個分區,每個分區中的內容可以被看作兩部分,一部分是對表單字段元素進行描述的描述頭,另外一部是表單字段元素的主體內容,如圖1.3所示。  圖 1.3  主體部分有兩種可能性,要么是用戶填寫的表單內容,要么是文件內容。FileItem類對象實際上就是對圖1.3中的一個分區的數據進行封裝的對象,它內部用了兩個成員變量來分別存儲描述頭和主體內容,其中保存主體內容的變量是一個輸出流類型的對象。當主體內容的大小小于DiskFileUpload.setSizeThreshold方法設置的臨界值大小時,這個流對象關聯到一片內存,主體內容將會被保存在內存中。當主體內容的數據超過DiskFileUpload.setSizeThreshold方法設置的臨界值大小時,這個流對象關聯到硬盤上的一個臨時文件,主體內容將被保存到該臨時文件中。臨時文件的存儲目錄由DiskFileUpload.setRepositoryPath方法設置,臨時文件名的格式為“upload_00000005(八位或八位以上的數字).tmp”這種形式,FileItem類內部提供了維護臨時文件名中的數值不重復的機制,以保證了臨時文件名的唯一性。當應用程序將主體內容保存到一個指定的文件中時,或者在FileItem對象被垃圾回收器回收時,或者Java虛擬機結束時,Apache文件上傳組件都會嘗試刪除臨時文件,以盡量保證臨時文件能被及時清除?! ∠旅娼榻BFileItem類中的幾個常用的方法:  2.1. isFormField方法  isFormField方法用于判斷FileItem類對象封裝的數據是否屬于一個普通表單字段,還是屬于一個文件表單字段,如果是普通表單字段則返回true,否則返回false。該方法的完整語法定義如下:  public boolean isFormField()  2.2. getName方法  getName方法用于獲得文件上傳字段中的文件名,對于圖1.3中的第三個分區所示的描述頭,getName方法返回的結果為字符串“C:/bg.gif”。如果FileItem類對象對應的是普通表單字段,getName方法將返回null。即使用戶沒有通過網頁表單中的文件字段傳遞任何文件,但只要設置了文件表單字段的name屬性,瀏覽器也會將文件字段的信息傳遞給服務器,只是文件名和文件內容部分都為空,但這個表單字段仍然對應一個FileItem對象,此時,getName方法返回結果為空字符串"",讀者在調用Apache文件上傳組件時要注意考慮這個情況。getName方法的完整語法定義如下:  public String getName()  注意:如果用戶使用Windows系統上傳文件,瀏覽器將傳遞該文件的完整路徑,如果用戶使用linux或者Unix系統上傳文件,瀏覽器將只傳遞該文件的名稱部分?! ?.3.getFieldName方法  getFieldName方法用于返回表單字段元素的name屬性值,也就是返回圖1.3中的各個描述頭部分中的name屬性值,例如“name=p1”中的“p1”。getFieldName方法的完整語法定義如下:  public String getFieldName()  2.4. write方法  write方法用于將FileItem對象中保存的主體內容保存到某個指定的文件中。如果FileItem對象中的主體內容是保存在某個臨時文件中,該方法順利完成后,臨時文件有可能會被清除。該方法也可將普通表單字段內容寫入到一個文件中,但它主要用途是將上傳的文件內容保存在本地文件系統中。其完整語法定義如下:  public void write(File file)  2.5.getString方法  getString方法用于將FileItem對象中保存的主體內容作為一個字符串返回,它有兩個重載的定義形式:  public java.lang.String getString()  public java.lang.String getString(java.lang.String encoding)  throws java.io.UnsupportedEncodingException  前者使用缺省的字符集編碼將主體內容轉換成字符串,后者使用參數指定的字符集編碼將主體內容轉換成字符串。如果在讀取普通表單字段元素的內容時出現了中文亂碼現象,請調用第二個getString方法,并為之傳遞正確的字符集編碼名稱?! ?.6. getContentType方法  getContentType 方法用于獲得上傳文件的類型,對于圖1.3中的第三個分區所示的描述頭,getContentType方法返回的結果為字符串“image/gif”,即“Content-Type”字段的值部分。如果FileItem類對象對應的是普通表單字段,該方法將返回null。getContentType 方法的完整語法定義如下:  public String getContentType()  2.7. isInMemory方法  isInMemory方法用來判斷FileItem類對象封裝的主體內容是存儲在內存中,還是存儲在臨時文件中,如果存儲在內存中則返回true,否則返回false。其完整語法定義如下:  public boolean isInMemory()  2.8. delete方法  delete方法用來清空FileItem類對象中存放的主體內容,如果主體內容被保存在臨時文件中,delete方法將刪除該臨時文件。盡管Apache組件使用了多種方式來盡量及時清理臨時文件,但系統出現異常時,仍有可能造成有的臨時文件被永久保存在了硬盤中。在有些情況下,可以調用這個方法來及時刪除臨時文件。其完整語法定義如下:  public void delete()  3. FileUploadException類  在文件上傳過程中,可能發生各種各樣的異常,例如網絡中斷、數據丟失等等。為了對不同異常進行合適的處理,Apache文件上傳組件還開發了四個異常類,其中FileUploadException是其他異常類的父類,其他幾個類只是被間接調用的底層類,對于Apache組件調用人員來說,只需對FileUploadException異常類進行捕獲和處理即可。  4. ServletRequestContext  ServletRequestContext類提供訪問request的方法。實現RequestContext接口。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲free性xxxx护士hd| 成人a免费视频| 亚洲国产私拍精品国模在线观看| 国产小视频国产精品| 久久久久久12| 中文字幕亚洲欧美一区二区三区| 久久精品久久久久久| 国产主播欧美精品| 45www国产精品网站| 国产精品成人免费视频| 欧美色道久久88综合亚洲精品| 国内揄拍国内精品少妇国语| 国产美女精品视频| 久久久之久亚州精品露出| 久久久久亚洲精品| 日韩高清免费在线| 欧美精品国产精品日韩精品| 国产精品吹潮在线观看| 色综合视频网站| 91精品国产综合久久香蕉最新版| 久久久人成影片一区二区三区| 97视频在线观看网址| 亚洲aⅴ男人的天堂在线观看| 国产v综合ⅴ日韩v欧美大片| 日韩www在线| 中文字幕久热精品在线视频| 国产精品日韩电影| 亚洲jizzjizz日本少妇| 久久精品亚洲热| 热久久免费国产视频| 97精品国产97久久久久久免费| 精品国内产的精品视频在线观看| 精品久久久免费| 97婷婷涩涩精品一区| 亚洲成人三级在线| 91黑丝在线观看| 日日噜噜噜夜夜爽亚洲精品| 91精品视频专区| 亚洲成avwww人| 日本不卡视频在线播放| www国产精品视频| 精品日本高清在线播放| 国产玖玖精品视频| 中文字幕日韩欧美精品在线观看| 精品久久久久久久久中文字幕| 亚洲精品国产精品自产a区红杏吧| 久久精品国产亚洲7777| 国产精品日日摸夜夜添夜夜av| 久久综合88中文色鬼| 亚洲久久久久久久久久久| 欧美在线一区二区视频| 51精品国产黑色丝袜高跟鞋| 美女国内精品自产拍在线播放| 亚洲国产成人精品一区二区| 日韩欧美精品在线观看| 国内精品久久久久久影视8| 欧美xxxx14xxxxx性爽| 久色乳综合思思在线视频| 欧美在线中文字幕| 久久影视电视剧免费网站清宫辞电视| 欧美主播福利视频| 尤物精品国产第一福利三区| 国产精品视频一区二区高潮| 国产一区二中文字幕在线看| 欧美精品在线极品| 国产精品中文久久久久久久| 日韩精品视频在线免费观看| 日韩性生活视频| 日韩电视剧免费观看网站| 92看片淫黄大片欧美看国产片| 久久久久99精品久久久久| 日韩中文字幕精品视频| 欧美中文在线观看| 中文字幕日韩欧美在线视频| 国产精品久久久久久久久久尿| 一区二区三区视频在线| 尤物yw午夜国产精品视频明星| 毛片精品免费在线观看| 亚洲第一网中文字幕| 2019中文在线观看| 亚洲天堂第二页| 亚洲欧美日韩精品久久| 国产亚洲一区二区精品| 国产精品91免费在线| 亚洲精品久久久久久下一站| 国内精品久久久久影院优| 国产成人高清激情视频在线观看| 国产免费一区二区三区在线观看| 亚洲精品国偷自产在线99热| 久久久91精品国产| 欧美性猛交xxxx久久久| 亚洲天堂日韩电影| 亚洲情综合五月天| 最近2019年中文视频免费在线观看| 亚洲女在线观看| 欧美激情日韩图片| 国产精品成人久久久久| 国产精品直播网红| 欧美日韩在线观看视频小说| 日韩一区二区久久久| 久久激情视频免费观看| 亚洲午夜未删减在线观看| 欧美性猛交xxxx乱大交蜜桃| 欧美夜福利tv在线| 国产亚洲精品久久久久动| 日韩免费不卡av| 国产精品88a∨| 日韩欧美中文字幕在线播放| 久久影院免费观看| 欧美精品激情在线| 欧美性受xxxx白人性爽| 亚洲精品电影久久久| 美女扒开尿口让男人操亚洲视频网站| 欧美一级淫片丝袜脚交| 久久手机精品视频| 久久综合伊人77777蜜臀| 成人福利在线视频| 久久久久久久久综合| 欧美尤物巨大精品爽| 91久久精品日日躁夜夜躁国产| 久久国产精品久久久久久久久久| 成人精品视频在线| 亚洲色图18p| 国产精品入口尤物| 91久久嫩草影院一区二区| 色系列之999| 日产精品久久久一区二区福利| 日韩成人免费视频| 国产精品露脸av在线| 日韩视频在线观看免费| 精品无人国产偷自产在线| 91网站在线看| 国产日韩在线精品av| 欧美激情一区二区三区在线视频观看| 日韩av在线最新| 亚洲第一中文字幕| 久久91亚洲精品中文字幕奶水| 中文字幕欧美日韩va免费视频| 亚洲的天堂在线中文字幕| 久久久免费精品| 北条麻妃久久精品| 国产视频久久久| 92版电视剧仙鹤神针在线观看| 在线成人激情视频| 亚洲一区二区久久久久久| 日日骚久久av| 成人久久久久爱| 国产视频福利一区| 国产一区红桃视频| 欧美日韩激情小视频| 欧洲成人午夜免费大片| 国产97色在线|日韩| 成人久久18免费网站图片| 91色视频在线导航| 欧美最猛性xxxxx亚洲精品| 国产精品一区久久久| 91久久国产婷婷一区二区| 狠狠操狠狠色综合网| 91爱视频在线| 日韩欧美一区视频| 欧美影院在线播放| 国产精品久久久久久久久久久新郎| 欧美黑人巨大xxx极品| 日韩中文字幕免费看|