亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Java Web 開發(fā)中文件上傳方法研究與實現

        2016-06-17 19:25:13陳濤黃艷峰
        電腦知識與技術 2016年11期
        關鍵詞:文件名表單瀏覽器

        陳濤++黃艷峰

        摘要:文件上傳是Web開發(fā)中經常需要實現的功能,介紹了Java Web開發(fā)中主流的文件上傳方法,包括SmartUpload和Commons FileUpload兩種組件上傳,以及Servlet 3.0支持的原生API文件上傳。給出了三種方法實現文件上傳的主要代碼,并對三者在上傳大文件時的效率進行了比較。

        關鍵詞:SmartUpload;Commons FileUpload;Servlet 3.0;文件上傳;Java Web

        中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2016)11-0048-02

        在Web應用開發(fā)中,文件上傳是經常需要實現的功能,目前廣為流傳的方法是使用第三方的文件上傳組件。具體在Java web開發(fā)領域,常用的上傳組件有SmartUpload、Apache Commons FileUpload等。在最新的Servlet 3.0規(guī)范中,對文件上傳提供了API的原生支持,這樣就可以不再依賴任何第三方上傳組件。本文將舉例探討以上三種文件上傳方法的特點,最后從上傳效率上給出三種方法的比較。

        1 SmartUpload組件

        SmartUpload是在Java Web開發(fā)中使用較多的一個文件上傳下載組件,它的特點是使用非常簡單,只需幾行代碼即可實現文件的上傳下載,所以即使SmartUpload已經停止了更新,但直到今天依然是很多開發(fā)者的選擇。

        SmartUpload的API中主要包括SmartUpload、Files、File、Request等核心類。由于篇幅限制,本文就不再列出各個類的方法了,讀者可自行上網查閱。下面舉例說明該組件的使用方法。

        1) 編寫文件上傳表單文件

        文件上傳表單使用屬性值為file的input標記,注意表單必須以post方式提交,表單的enctype屬性必須是multipart/form-data。該文件在三種文件上傳方法中都需要用到。

        2) 編寫JSP文件實現文件上傳

        首先需要將下載的SmartUpload組件jar包拷貝至Web應用的WEB-INF\lib目錄下,然后編寫實現文件上傳功能的JSP文件。文件上傳核心代碼如下:

        注意不同瀏覽器的默認設置不同,IE瀏覽器默認提交文件的整個路徑(可以在Internet安全設置更改為不包含本地路徑),而火狐或谷歌瀏覽器默認只提交文件名,所以需要考慮可能包含路徑的情況,把文件名從中提取出來。Commons FileUpload組件自身沒有提供限制上傳文件類型的方法,需要自行編碼從文件名取出擴展名并與允許上傳的文件擴展名進行比較,然后給出用戶相應的錯誤提示。除了使用FileItem的write()方法保存文件外,還可以通過FileItem的getInputStream()方法獲取文件輸入流,然后再通過輸出流保存至文件甚至是數據庫。在上傳文件時如果超出了文件大小限制,系統會拋出異常FileSizeLimitExceedException,此異常是FileUploadException異常的子類,所以可以捕獲該異常,并在異常處理代碼中給出用戶錯誤提示。

        3 Servlet 3.0文件上傳

        上述兩種文件上傳方法都需要用到第三方組件,而在最新的Servlet 3.0規(guī)范中,提供了對文件上傳的原生支持,直接使用Servlet 3.0提供的API就能夠輕松實現文件上傳。較之Servlet2.5主要是增加了兩個類:MultipartConfig和Part。其中MultipartConfig是注解類,要想讓Servlet支持文件上傳只需在其前面添加如下形式注解即可:

        @MultipartConfig(maxFileSize=1024*1024*300) //設置單個文件最大上傳大小,如300M

        另外HttpServletRequest類還增加了一個getParts()方法,該方法可以獲取表單提交過來的所有上傳文件,這些文件信息封裝在一個個的Part對象中。Part類提供了write方法用于保存上傳的文件。在Servlet的doPost()方法編寫如下代碼:

        for(Part part : request.getParts()) { //遍歷所有上傳的文件

        String filename = getFilename(part); //自定義方法從請求頭信息中得到文件名

        File savePath = request.getServletContext().getRealPath(“upload\\”) + filename;

        part.write(savePath); //保存上傳的文件到指定的路徑

        }

        因為Servlet 3.0沒有提供直接獲取文件名的方法,所以只能自行編寫方法getFilename()從請求頭中解析文件名。以火狐瀏覽器為例(若是IE,則文件名帶路徑),請求頭格式為:

        Content-Disposition: form-data; name="fileName"; filename="test.avi"。getFilename()方法代碼如下:

        private String getFilename(Part part) {

        String contentDisp = part.getHeader("content-disposition");

        String[] tokens = contentDisp.split(";");

        for (String token : tokens) {

        if (token.trim().startsWith("filename")) {

        String filename = token.substring(token.indexOf("=") + 2, token.length()-1);

        return filename.substring(filename.lastIndexOf("\\")+1); //兼容所有瀏覽器

        }

        }

        return "";

        }

        如果上傳文件違法大小限制,在獲取Part對象時將拋出IllegalStateException異常,所以可以將以上for循環(huán)代碼置入try-catch結構中,通過捕獲IllegalStateException異常來判斷文件是否超出大小限制。對于上傳文件后綴的限制方法與Commons FileUpload組件一樣,也是在得到的文件名中提取擴展名,再與允許上傳的文件擴展名比較即可。

        4 運行測試

        分別運行以上三種文件上傳程序,當上傳體積較小文件時,三者在資源利用率及響應時間方面差別不太顯著,但當增加上傳文件大小時,例如上傳300M左右的視頻文件,經測試使用SmartUpload組件、Commons FileUpload組件、Servlet 3.0 API上傳文件花費的平均時間分別為6.642s、5.174s、4.750s。從資源占用情況來看,Servlet 3.0 API文件上傳也是最節(jié)約系統資源的方法。

        5 結論

        本文分析對比了目前Java Web開發(fā)中三種常見的文件上傳方法,前兩種方法需要借助第三方組件來實現,其中SmartUpload組件代碼簡單,實現方便,但目前已停止更新,并且在上傳大文件時效率不高,而Commons FileUpload組件目前依然在更新維護中,上傳大文件時有不錯的性能,并且也被很多主流框架所使用。最后一種文件上傳方法使用Servlet 3.0自身的API來實現,不再依賴第三方組件,上傳效率比Commons FileUpload也更為高效,所以如果Java Web項目是基于Java EE 6以上版本開發(fā)的,建議考慮使用Servlet 3.0 API的文件上傳方法。

        參考文獻:

        [1] 張書鋒.基于Java語言的文件上傳組件研究[J].電腦知識與技術,2013(33).

        [2] 劉楊. JSP項目開發(fā)常用文件上傳組件比較及舉例[J].電腦編程技巧及維護,2015(8).

        [3] 周兵.基于JSP文件上傳中的問題探討及改進方案[J].蘭州工業(yè)學院學報,2015(4).

        猜你喜歡
        文件名表單瀏覽器
        電子表單系統應用分析
        華東科技(2021年9期)2021-09-23 02:15:24
        右鍵調用多重更名更方便
        電腦愛好者(2019年9期)2019-10-30 03:43:29
        Excel輕松提取文件名
        反瀏覽器指紋追蹤
        電子制作(2019年10期)2019-06-17 11:45:14
        淺談網頁制作中表單的教學
        環(huán)球瀏覽器
        再見,那些年我們嘲笑過的IE瀏覽器
        英語學習(2015年6期)2016-01-30 00:37:23
        不讓長文件名成為“絆腳石”
        電腦迷(2014年8期)2014-04-29 07:37:40
        基于Infopath實現WEB動態(tài)表單的研究
        電子世界(2012年24期)2012-12-17 10:49:06
        動態(tài)表單技術在教學管理中的應用*
        亚洲国产性夜夜综合另类| 国模无码视频专区一区| 中文字幕无码免费久久9一区9| 精品蜜桃av一区二区三区| 日本一区二区免费看片| 超碰国产精品久久国产精品99| 国产成人精品a视频| 妓院一钑片免看黄大片| 国产中文字幕乱码在线| 国产大学生自拍三级视频| 国产一区二区三区最新地址| 国产精品亚洲片在线观看不卡| 成片免费观看视频大全| 亚洲熟妇AV一区二区三区宅男| 亚洲国产精品夜男人天堂| 国产交换精品一区二区三区| 狠狠色丁香婷婷综合潮喷 | 2021久久精品国产99国产精品| 国产一区二区激情对白在线| 国产精品亚洲一区二区三区正片 | 亚洲av福利天堂一区二区三 | 日本饥渴人妻欲求不满| 少妇仑乱a毛片| 91精品国产91久久久无码95| 亚洲天堂免费一二三四区| 国产精品人妻熟女男人的天堂| 玩弄人妻少妇精品视频| 国内老熟妇对白xxxxhd| 国产成人一区二区三区影院免费| 国产一区二区三区在线观看黄| 亚洲精品无码av人在线观看国产| 国产精品狼人久久久久影院| 岛国大片在线免费观看 | 欧美亚洲高清日韩成人| 亚洲黄色一插一抽动态图在线看| 国产一区亚洲二区三区极品| 亚洲精品久久久www小说| 男女超爽视频免费播放| 免费人成黄页网站在线观看国产 | 国产艳妇av在线出轨| 日本视频一区二区这里只有精品 |