zoukankan      html  css  js  c++  java
  • 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.运行后,上传文件,即可从控制台输出加密后的文件字符串
    最后附上源码:点击下载
  • 相关阅读:
    再深一点:如何给女朋友解释什么是微服务?
    图文详解:内存总是不够,我靠HBase说服了Leader为新项目保驾护航
    Java多态总结
    猴子吃桃问题(南阳ACM324)
    杭电acm-2007平方和立方和
    出现错误,修改后的
    今天的第一个程序-南阳acm输入三个数排序
    Azure Blob上传和下载
    用Aspose.Cells把Excel文件转成PDF
    Ionic IOS打包第二节
  • 原文地址:https://www.cnblogs.com/huozhicheng/p/2525928.html
Copyright © 2011-2022 走看看