使用Apache文件上传组件实现web页面文件上传

用servlet的upload功能实现文件上传很繁琐,代码量很大。可以用fileupload library组件实现文件上传,具体操作步骤如下:

 1. 下载相关组件(commons-fileupload-xxx.jar及commons-io-xxx.jar)并copy 到项目的WEB-INF/lib 目录下,完成组件的引用;

代码如下:

  try{

       DiskFileItemFactory factory=new DiskFileItemFactory();    //创建一个DiskFileItemFactory工厂

       ServletFileUpload upload=new ServletFileUpload(factory);  //创建一个文件上传解析器

        upload.setHeaderEncoding("UTF-8");            //解决上传文件名中文乱码问题

        //判断上传的数据是否上传表单数据,如果不是则不做处理

        if(!ServletFileUpload.isMultipartContent(request)) {

              return;   

        }

        //利用ServletFileUpload解析上传数据,解析结果返回的是List<FileItem>

        List<FileItem> list=upload.parseRequest<request>;

        for(FileItem item:List){

              //如果FileItem中封装的是普通入项数据,

              if(Item.isFormField()){

                 String name=item.getFieldName();

                 String value=item.getString("UTF-8");

              } 

              else {

                    //如果FileItem中封装的是上传文件内容

                    //得到上传文件名

                    String filename=item.getName();

                     if(filename==null || filename.trim().equals("")) {

                          continue;

                     }

                     //如果有些浏览器上传的文件名中带有路径,则截取路径,只保留文件名

                      filename=filename.substring(filename.lostIndexof("\\")+1);

                      InputStream in=item.getInputStream();               //获取item中的上传文件输入流

                      FileOutputStream out=new FileOutputStream(file);         //创建一个文件输出流

                      byte buffer[]=new byte[1024];                                   //创建一个缓冲区

                      //用一个变量标记输入流中的数据是否已经读完

                      int len=0;

                      while((len=in.read(buffer))>0){

                             out.write(buffer,0,len);

                      }

                     //关闭输入流

                     in.close();

                      //关闭输出流

                     out.close();

                     //关闭上传产生的临时文件

                     item.delete();

                     message="upload ok";

               }

        }       

  }catch (Exception e){

          message="uplaod failure";

          e.printStackTrace();

  }

  response.getWriter().append(message);

       

猜你喜欢

转载自blog.csdn.net/ks_jack/article/details/87933313