使用FileUpload组件实现文件上传


文件上传在web应用中非常普遍,要在servlet/jsp环境中实现文件上传功能非常容易,因为网上已经有许多用java开发的组件用于文件上传,本文以commons-fileupload组件为例,为servlet/jsp应用添加文件上传功能。

common-fileupload组件是apache的一个开源项目之一,可以从 http://jakarta.apache.org/commons/fileupload/ 下载。该组件简单易用,可实现一次上传一个或多个文件,并可限制文件大小。

下载后解压zip包,将commons-fileupload-1.0.jar复制到tomcat的webapps\你的webapp\WEB-INF\lib\下,如果目录不存在请自建目录。

新建一个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\\ " //  用于存放临时文件的目录
11 
12       public   void  doPost(HttpServletRequest request, HttpServletResponse response)
13           throws  IOException, ServletException
14      {
15      }
16  }
17 
18  // 当servlet收到浏览器发出的Post请求后,在doPost()方法中实现文件上传。以下是示例代码:
19 
20  public   void  doPost(HttpServletRequest request, HttpServletResponse response)
21       throws  IOException, ServletException
22  {
23       try  {
24          DiskFileUpload fu  =   new  DiskFileUpload();
25           //  设置最大文件尺寸,这里是4MB
26          fu.setSizeMax( 4194304 );
27           //  设置缓冲区大小,这里是4kb
28          fu.setSizeThreshold( 4096 );
29           //  设置临时目录:
30          fu.setRepositoryPath(tempPath);
31 
32           //  得到所有的文件:
33          List fileItems  =  fu.parseRequest(request);
34          Iterator i  =  fileItems.iterator();
35           //  依次处理每一个文件:
36           while (i.hasNext()) {
37              FileItem fi  =  (FileItem)i.next();
38               //  获得文件名,这个文件名包括路径:
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           //  跳转到上传成功提示页面
48      }
49       catch (Exception e) {
50           //  可以跳转出错页面
51      }
52  }
53 
54  // 如果要在配置文件中读取指定的上传文件夹,可以在init()方法中执行:
55 
56  public   void  init()  throws  ServletException {
57      uploadPath  =  .
58      tempPath  =  .
59       //  文件夹不存在就自动创建:
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,没有的话新建一个。典型配置如下:

   <? xml version="1.0" encoding="ISO-8859-1" ?> 
   <! DOCTYPE web-app
        PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
       "http://java.sun.com/dtd/web-app_2_3.dtd" > 
   
    < web-app > 
        < servlet > 
            < servlet-name > Upload </ servlet-name > 
           < servlet-class > Upload </ servlet-class > 
       </ servlet > 
  
       < servlet-mapping > 
           < servlet-name > Upload </ servlet-name > 
           < url-pattern > /fileupload </ url-pattern > 
       </ servlet-mapping > 
  </ web-app > 
配置好servlet后,启动tomcat,写一个简单的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时指定的url-pattern。

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

你可能感兴趣的:(apache,tomcat,Web,jsp,servlet)