文件上傳實(shí)現(xiàn)

          文件上傳在web應(yīng)用中非常普遍,要在servlet/jsp環(huán)境中實(shí)現(xiàn)文件上傳功能非常容易,因?yàn)榫W(wǎng)上已經(jīng)有許多用java開發(fā)的組件用于文件上傳,本文以commons-fileupload組件為例,為servlet/jsp應(yīng)用添加文件上傳功能。

          common-fileupload組件是apache的一個(gè)開源項(xiàng)目之一,可以從 http://jakarta.apache.org/commons/fileupload/ 下載。該組件簡單易用,可實(shí)現(xiàn)一次上傳一個(gè)或多個(gè)文件,并可限制文件大小。

          下載后解壓zip包,將commons-fileupload-1.0.jar復(fù)制到tomcat的webapps\你的webapp\WEB-INF\lib\下,如果目錄不存在請自建目錄。

          新建一個(gè)servlet: Upload.java用于文件上傳:

          ?1?import?java.io.* ;
          ?2?import?java.util.*
          ;
          ?3?import?javax.servlet.*
          ;
          ?4?import?javax.servlet.http.*
          ;
          ?5?import?org.apache.commons.fileupload.*
          ;
          ?6?

          ?7?public?class?Upload?extends ?HttpServlet?{
          ?8?

          ?9?????private?String?uploadPath?=?"C:\\upload\\";?//?用于存放上傳文件的目錄
          10?????private?String?tempPath?=?"C:\\upload\\tmp\\";?//?用于存放臨時(shí)文件的目錄
          11?
          12?????public?void ?doPost(HttpServletRequest?request,?HttpServletResponse?response)
          13?????????throws
          ?IOException,?ServletException
          14?
          ????{
          15?
          ????}
          16?
          }
          17?

          18?//當(dāng)servlet收到瀏覽器發(fā)出的Post請求后,在doPost()方法中實(shí)現(xiàn)文件上傳。以下是示例代碼:
          19?
          20?public?void ?doPost(HttpServletRequest?request,?HttpServletResponse?response)
          21?????throws
          ?IOException,?ServletException
          22?
          {
          23?????try
          ?{
          24?????????DiskFileUpload?fu?=?new
          ?DiskFileUpload();
          25?????????//?設(shè)置最大文件尺寸,這里是4MB

          26?????????fu.setSizeMax(4194304 );
          27?????????//?設(shè)置緩沖區(qū)大小,這里是4kb

          28?????????fu.setSizeThreshold(4096 );
          29?????????//?設(shè)置臨時(shí)目錄:

          30? ????????fu.setRepositoryPath(tempPath);
          31?

          32?????????//?得到所有的文件:
          33?????????List?fileItems?= ?fu.parseRequest(request);
          34?????????Iterator?i?=
          ?fileItems.iterator();
          35?????????//?依次處理每一個(gè)文件:

          36?????????while (i.hasNext())?{
          37?????????????FileItem?fi?=
          ?(FileItem)i.next();
          38?????????????//?獲得文件名,這個(gè)文件名包括路徑:

          39?????????????String?fileName?= ?fi.getName();
          40?????????????if(fileName!=null
          )?{
          41?????????????????//
          ?在這里可以記錄用戶和文件信息
          42?????????????????//
          ?
          43?????????????????//?寫入文件a.txt,你也可以從fileName中提取文件名:

          44?????????????????fi.write(new?File(uploadPath?+?"a.txt" ));
          45?
          ????????????}
          46?
          ????????}
          47?????????//?跳轉(zhuǎn)到上傳成功提示頁面

          48? ????}
          49?????catch
          (Exception?e)?{
          50?????????//?可以跳轉(zhuǎn)出錯(cuò)頁面

          51? ????}
          52?
          }
          53?

          54?//如果要在配置文件中讀取指定的上傳文件夾,可以在init()方法中執(zhí)行:
          55?
          56?public?void?init()?throws ?ServletException?{
          57?????uploadPath?=
          ?.
          58?????tempPath?=
          ?.
          59?????//?文件夾不存在就自動創(chuàng)建:

          60?????if(!new ?File(uploadPath).isDirectory())
          61?????????new
          ?File(uploadPath).mkdirs();
          62?????if(!new
          ?File(tempPath).isDirectory())
          63?????????new
          ?File(tempPath).mkdirs();
          64?
          }
          65?

          編譯該servlet,注意要指定classpath,確保包含commons-upload-1.0.jar和tomcat\common\lib\servlet-api.jar。

          配置servlet,用記事本打開tomcat\webapps\你的webapp\WEB-INF\web.xml,沒有的話新建一個(gè)。典型配置如下:

          ?1?<?xml?version="1.0"?encoding="ISO-8859-1"?>
          ?2?<! DOCTYPE?web-app
          ?3?
          ????PUBLIC?"-//Sun?Microsystems,?Inc.//DTD?Web?Application?2.3//EN"
          ?4?????"http://java.sun.com/dtd/web-app_2_3.dtd">

          ?5?
          ?6?<web-app>
          ?7?????<servlet>
          ?8?????????<servlet-name>Upload</servlet-name>
          ?9?????????<servlet-class>Upload</servlet-class>
          10?????</servlet>
          11?
          12?????<servlet-mapping>
          13?????????<servlet-name>Upload</servlet-name>
          14?????????<url-pattern>/fileupload</url-pattern>
          15?????</servlet-mapping>
          16?</web-app>
          17?
          配置好servlet后,啟動tomcat,寫一個(gè)簡單的html測試:
          1?<form?action="fileupload"?method="post"
          2?enctype="multipart/form-data"?name="form1">
          3???<input?type="file"?name="file">
          4???<input?type="submit"?name="Submit"?value="upload">
          5?</form>

          注意action="fileupload"其中fileupload是配置servlet時(shí)指定的url-pattern。

          摘自:
          http://www.j2medev.com/Article/Class10/j2eeopensource/200409/62.html



          posted on 2006-07-06 08:35 nbt 閱讀(384) 評論(0)  編輯  收藏 所屬分類: Servele&JSP和js

          <2006年7月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          Java技術(shù)網(wǎng)站

          友情鏈接

          國內(nèi)一些開源網(wǎng)站

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 武鸣县| 平定县| 德昌县| 资兴市| 香港| 苏尼特左旗| 腾冲县| 辛集市| 定襄县| 遵义县| 驻马店市| 长武县| 肥西县| 衡南县| 临潭县| 淅川县| 梁河县| 九龙城区| 梁山县| 西林县| 忻城县| 临海市| 天等县| 临沂市| 浦东新区| 东辽县| 延吉市| 建平县| 克什克腾旗| 临漳县| 泰来县| 罗平县| 灌南县| 额敏县| 邛崃市| 长岛县| 金昌市| 招远市| 广汉市| 江川县| 仁怀市|