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

来源:互联网 发布:php导入excel到数据库 编辑:程序博客网 时间:2024/05/22 00:15

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); // 设置缓冲区大小,这里是10kbServletFileUpload   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文件夹,别忘了,不然程序会报告错误的。

0 0
原创粉丝点击