Commons FileUpload 上传文件,得到文件流

最近在做一个从客户端上传文件,服务器得到文件流,加密,并得到字符串存入数据库,由于对java文件的操作甚少,经过几番折腾,终于搞定,特意拿出来分享。

上传采用的是Commons FileUpload,Commons FileUpload上传需要两个jar包,分别是commons-fileupload-1.2.2.jarcommons-io-2.3.jar
Commons FileUpload提供三种文件上传处理方式,DiskFileUpload、ServletFileUpload和PortletFileUpload三种方式,其中DiskFileUpload已经在javadoc下已经被标记为过期的方法,建议用ServletFileUpload代替,而PortletFileUpload需要配合portlet-api来使用,所以这里我使用的是ServletFileUpload,并且这个也是最常用的。
 
1.首先用到Html的input标签,type为file
< form action ="UploadServlet" enctype= "multipart/form-data" method ="post" >
             < input type ="file" name= "filecer" id= "filecer" >
             < input type ="text" name= "name">
             < input type ="submit" value= "上传">
       </form >
注意:form表单的enctype= "multipart/form-data" method ="post"
 
2.创建一个servlet,用来处理提交表单数据。servlet-name为:UploadServlet,并创建service方法,方法如下:
//检查输入请求是否为 multipart表单数据
             boolean isMultipart = ServletFileUpload.isMultipartContent(request);
             try {
                   if (isMultipart == true) {
                         //为该请求创建一个DiskFileItemFactory对象,通过它来解析请求
                        FileItemFactory factory = new DiskFileItemFactory();
                        ServletFileUpload upload = new ServletFileUpload(factory);
                         //将所有的表单项目都保存到List中
                        List<FileItem> items = upload.parseRequest(request);
                        Iterator<FileItem> itr = items.iterator();
                         //循环list,取得表单项
                         while (itr.hasNext()) {
                              FileItem item = (FileItem) itr.next();
                               //检查当前项目是普通表单项目还是文件。
                               if (item.isFormField()) {//如果是普通表单项目,显示表单内容。
                                    String fieldName = item.getFieldName();
                                     if (fieldName.equals("name" )){ //对应form表单中type="text" name="name"
                                          System. out .println("the field name is" + item.getString()); //显示表单内容
                                    }
                              } else {//如果是文件
                                     if (item.getFieldName().equals("filecer" )){ //如果上传文件的file的name为" filecer"
                                          InputStream inStream = item.getInputStream();
                                          ByteArrayOutputStream out = new ByteArrayOutputStream();
                                           int ch;
                                          String res = "" ;
                                           while ((ch = inStream.read()) != -1) {
                                                out.write(ch);
                                          }
                                           byte [] result = out.toByteArray();
                                          res = Base64.byteArrayToBase64(result);
                                          
                                          System. out .println(res);
                                          System. out .print("the upload file name is" + item.getName());
                                    }
                              }
                        }
                  } else {
                        System. out .println("the enctype must be multipart/form-data");
                  }
            } catch (FileUploadException e) {
                  e.printStackTrace();
            }
3.运行后,上传文件,即可从控制台输出加密后的文件字符串
最后附上源码:点击下载
posted @ 2012-05-30 10:57  Horrison  阅读(5472)  评论(0编辑  收藏  举报