十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇文章为大家展示了使用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"); Listvalues; 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); } } }