使用struts2实现一个文件上传功能并显示进度条-创新互联

本篇文章为大家展示了使用struts2实现一个文件上传功能并显示进度条,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

为武平等地区用户提供了全套网页设计制作服务,及武平网站建设行业解决方案。主营业务为网站设计、成都做网站、武平网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

一. struts2读取进度原理分析

1. 在strut2中控制文件上传信息的类是实现MultiPartRequest接口的JakartaMultiPartRequest

其实第一次看到源文件时我打了个退堂鼓,因为觉得内容太长了,不想看。冷静下来将思路理顺,将分开的各个方法还原到一个方方中中,发现还是很好理解的:

@Override
 public void parse(HttpServletRequest request, String saveDir)
   throws IOException {
  setLocale(request);
     //规定了File文件的格式(如文件名必须是xxFileName,文件类型xxContentType),并定义了File的保存路径                 DiskFileItemFactory factory = new DiskFileItemFactory(); 
  ServletFileUpload upload = new ServletFileUpload(factory);//处理文件上传的servlet
  upload.setProgressListener(new FileUploadProgressListener(request)); //为文件上传添加监听  factory.setSizeThreshold(0); //if (saveDir != null
   factory.setRepository(new File(saveDir));//临时路径
  }
  try {
   upload.setSizeMax(maxSize);
   List items = upload.parseRequest(createRequestContext(request)); //获取所有请求
   for (Object obItem : items) {
    FileItem item = (FileItem) obItem; //获取每个请求的文件
    if (LOG.isDebugEnabled()) {
     LOG.debug("Found item" + item.getFieldName());
    }
    if (item.isFormField()) { //普通表单提交
     LOG.debug("Item is a normal form field");
     List values;
     if (params.get(item.getFieldName()) != null) {
      values = params.get(item.getFieldName());
     } else {
      values = new ArrayList();
     }
     String charset = request.getCharacterEncoding();
     if (charset != null) {
      values.add(item.getString(charset));
     } else {
      values.add(item.getString());
     }
     params.put(item.getFieldName(), values);
    } else { //文件上传请求
     LOG.debug("Item is a file upload");
     if (item.getName() == null
       || item.getName().trim().length() <= 0) {
      LOG.debug("No file has been uploded for the filed:"
        + item.getFieldName());
      continue;
     }

     List values;
     if (files.get(item.getFieldName()) != null) {
      values = files.get(item.getFieldName());
     } else {
      values = new ArrayList();
     }
     values.add(item);
     files.put(item.getFieldName(), values);
    }
   }

  } catch (FileUploadBase.SizeLimitExceededException e) {
   System.out.println("错误1:" + e);
   if (LOG.isWarnEnabled()) {
    LOG.warn("Request exceeded size limit!", e);
   }
   String errorMessage = buildErrorMessage(e, new Object[]{e.getPermittedSize(), e.getActualSize()});
   if (!errors.contains(errorMessage)) {
    errors.add(errorMessage);
   }
  } catch (Exception e) {
   System.out.println("错误1:" + e);
   if (LOG.isWarnEnabled()) {
    LOG.warn("Unable to parse request", e);
   }
   String errorMessage = buildErrorMessage(e, new Object[]{});
   if (!errors.contains(errorMessage)) {
    errors.add(errorMessage);
   }
  }
 }

新闻名称:使用struts2实现一个文件上传功能并显示进度条-创新互联
本文地址:http://scyanting.com/article/pgpcj.html