`
uule
  • 浏览: 6310097 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

【使用Common-FileUpload框架上传文件基本代码】

    博客分类:
  • JSP
阅读更多

1.来源1:

http://hi.baidu.com/ljmybfq/blog/item/9b1f14ee4ee194f3b3fb957a.html/cmtid/467aff1115dd6f73cb80c401

来源2:

 http://zhangjunhd.blog.51cto.com/113473/18331

部分代码经过自己完善和修改,由于自己不熟练,所以基本上通常用到的都加到了里面。

 

所需包:commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar


首先下载:commons-fileUpload-1.2 的jar包:http://www.apache.org/commons/,同时可以把commons-IO的jar包一起下载,以后会用到的。
1、上传的前台页面:
    

<form action="MultipartTestServlet" enctype="multipart/form-data" method="post">
     <input type="text" name="username" /><br />
     <input type="file" name="myfile" /><br/>
     <input type="submit" />
</form>

 
2、上传的后台代码:    

   通过ServletFileUpload静态类来解析Request,工厂类会对mulipart类的表单中的所有字段进行处理,不只是file字段。

getName()得到文件名,getString()得到表单数据内容,isFormField()可判断是否为普通的表单项。

更多的属性介绍:

http://hi.baidu.com/qdblove/blog/item/c81db602286e3d064afb51dc.html
一个完整的例子:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("Access !");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        //保存文件到服务器中
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(4096);
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setSizeMax(maxPostSize);
        try {
            List fileItems = upload.parseRequest(request);
            Iterator iter = fileItems.iterator();
            while (iter.hasNext()) {
                FileItem item = (FileItem) iter.next();
                if (!item.isFormField()) {
                    String name = item.getName();
                    System.out.println(name);
                    try {
                        item.write(new File(uploadPath + name));
                       // SaveFile s = new SaveFile();
                       // s.saveFile(name);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        } catch (FileUploadException e) {
            e.printStackTrace();
            System.out.println(e.getMessage() + "结束");
        }
    }

 

public void doPost(HttpServletRequest request, HttpServletResponse response){
        String path= "C:/upload" ; 

		File  uploadPath = new File( path );// 上传文件目录
        if (!uploadPath.exists()) {
            uploadPath.mkdirs();
        }
        File  tempPathFile = new File( path+" /temp/");// 临时文件目录
        if (! tempPathFile.exists ()) {
            tempPathFile.mkdirs ();
        }

		DiskFileItemFactory factory = new DiskFileItemFactory();
		factory.setRepository(tempPathFile);  // 设置临时文件目录
		factory.setSizeThreshold(10 * 1024); // 设置缓冲区大小,这里是10kb

		ServletFileUpload   upload = new ServletFileUpload(factory);  // 获取上传对向   
		upload.setSizeMax(100*1024*1024);    //设置上传文件大小的上限,-1表示无上限

		List <FileItem> items = upload.parseRequest(request);  
		//上传文件,并解析出所有的表单字段,包括普通字段和文件字段
	  
		Iterator<FileItem>  it = items.iterator();
		while(it.hasNext()){
			FileItem  fi = (FileItem) it.next();
	 
			// if (!UtilValidate.isEmpty(fileName)) {判断是否为空
			if(! fi.getName().endsWith(".xls") ){     //判断扩展名             
			   //throws ...;
			} 
			
			//如果是普通表单项目,显示表单内容 
			if(fi.isFormField()){   
				String  fieldName = fi.getFieldName();
				if (fieldName.equals("username"))
					//对应demo1.html中type="text" name="username"
					System.out.print("the field name is" + fi.getString());//显示表单内容
				}else{
					// 如果是上传文件,显示文件名 
					System.out.println( fi.getName() + "   " +    fi.getContentType() + "   " +   fi.getSize());

					//保存文件,其实就是把缓存里的数据写到目标路径下
					if(fi.getName()!=null && fi.getSize()!=0){
						File fullFile = new File(fi.getName());  // fi.getName()获得文件名,包括路径 
						File savedFile= new File(uploadPath + fullFile.getName());
		 
						int index = 0; // 文件重名时,添加标识
						while (savedFile .exists()) {
							index++;
							savedFile = new File(uploadPath, "_" + index + "_" + fullFile.getName());
						} 
						fi.write(savedFile);   // 写到文件去
						fileName = savedFile.getName(); // 写入的文件名 
					}
				}
			}
		}
}
			

 


3、编译和配置servlet
       先设置classpath,使它包含commons-fileUpload的jar包路径,然后进行编译即可,注意这里的包路径。
       然后打开站点下的web-inf路径下的web.xml,在里面添加:

<servlet>
      <servlet-name>MultipartTestServlet</servlet-name>
      <servlet-class>upload.MultipartTestServlet</servlet-class>
</servlet> 
    <servlet>
      <servlet-name>dispatcher</servlet-name>
      <servlet-class>helloApp.DispatcherServlet</servlet-class>
</servlet>

 
好了,现在就可以文件上传了,不过运行之前记得在c:\下新建tmp和temp文件夹,别忘了,不然程序会报告错误的。

分享到:
评论
1 楼 小蝶兒 2012-12-03  
求问,如果我想让项目下的文件夹也显示上传的文件,该怎么做

相关推荐

Global site tag (gtag.js) - Google Analytics