• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > Struts2实现文件上传时显示进度条功能

Struts2实现文件上传时显示进度条功能

作者:surmounting 字体:[增加 减小] 来源:互联网 时间:2017-05-28

surmounting 通过本文主要向大家介绍了struts2进度条,struts2 上传进度条,struts2文件上传,struts2配置文件详解,struts2文件下载等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

       最近在做一个资源共享的项目中,采用了Struts2.1.8+Spring2.5.6+hibernate3.32的框架整合方式进行开发。在文件上传这块,因为需要实现文件上传时显示进度条的功能,所以尝试了一下。怕以后忘记,先贴出来分享下。

       要在上传文件时能显示进度条,首先需要实时的获知web服务端接收了多少字节,以及文件总大小,这里我们在页面上使用AJAX技术每一秒向服务器发送一次请求来获得需要的实时上传信息。但是当我们使用struts2后怎么在服务端获得实时的上传大小呢?这里需要用到commons-fileupload中的progressListener接口,实现这个接口,然后再实现一个自己的解析器,并在解析器中添加自己实现的那个progressListener;然后再替换struts2自带的解析器(struts2自带的解析器类没有添加progressListener),然后就可以了。下面看看主要的代码(技术有限,如有不对之处,望不吝点解): 

监听器:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.ProgressListener;

public class ResourceProgressListener implements ProgressListener {
 private HttpSession session;
 public ResourceProgressListener(HttpServletRequest request) {
  session = request.getSession();
  ResourceFileUploadStatus newUploadStatus = new ResourceFileUploadStatus();
  session.setAttribute("currentUploadStatus", newUploadStatus);

 }
 public void update(long readedBytes, long totalBytes, int currentItem) {
  ResourceFileUploadStatus status = (ResourceFileUploadStatus) session.getAttribute("currentUploadStatus");
  status.setReadedBytes(readedBytes);
  status.setTotalBytes(totalBytes);
  status.setCurrentItem(currentItem);

 }

}

</div>

上传状态类:

public class ResourceFileUploadStatus {
 private long readedBytes = 0L;
 private long totalBytes = 0L;
 private int currentItem = 0;

 public long getReadedBytes() {

  return readedBytes;
 }
 public void setReadedBytes(long bytes) {
  readedBytes = bytes;
 }

 public long getTotalBytes() {
  return totalBytes;
 }
 public void setTotalBytes(long bytes) {
  totalBytes = bytes;
 }
 public int getCurrentItem() {
  return currentItem;

 }

 public void setCurrentItem(int item) {
  currentItem = item;

 }

}

</div>

实现自己的解析器类:方法比较简单,找到struts2实现的解析器类,把代码拷贝过来然后添加上监听器即可。这个类代码较多就不整个文件拷了,主要是在parse方法里添加。Parse方法代码如下:红色标注部分即是需要自己添加的progressListener.

public void parse(HttpServletRequest servletRequest, String saveDir)
  throws IOException {

 System.out.println("执行自定义MultiPartRequest");
  DiskFileItemFactory fac = new DiskFileItemFactory();
  // Make sure that the data is written to file
  fac.setSizeThreshold(0);
  if (saveDir != null) {
   fac.setRepository(new File(saveDir));
  }

  // Parse the request

  try {

   ServletFileUpload upload = new ServletFileUpload(fac);
   upload.setSizeMax(maxSize);

   ResourceProgressListener progressListener = new ResourceProgressListener(servletRequest);//新建一个监听器

    upload.setProgressListener(progressListener);//添加自己的监听器

   List items = upload.parseRequest(createRequestContext(servletRequest));

    for (Object item1 : items) {

    FileItem item = (FileItem) item1;
    if (LOG.isDebugEnabled()) LOG.debug("Found item " + item.getFieldName());
    if (item.isFormField()) {
     LOG.debug("Item is a normal form field");
     List<String> values;
     if (params.get(item.getFieldName()) != null) {
      values = params.get(item.getFieldName());
     } else {

      values = new ArrayList<String>();

     }
     String charset = servletRequest.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");

 

     // Skip file uploads that don't have a file name - meaning that no file was selected.
     if (item.getName() == null || item.getName().trim().length() < 1) {
      LOG.debug("No file has been uploaded for the field: " + item.getFieldName());
      continue;

     }
 

     List<FileItem> values;
     if (files.get(item.getFieldName()) != null) {
      values = files.get(item.getFieldName());
     } else {
      values = new ArrayList<FileItem>();

     }

 

     values.add(item);
     files.put(item.getFieldName(), values);
    }
   }
  } catch (FileUploadException e) {
   LOG.warn("Unable to parse request", e);
   errors.add(e.getMessage());

  }

} 
</div>

上面的类建立完成后,还需要做一项工作:在struts.xml中添加如下内容:

<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="requestParser"
 class="com.zeige.ResourceMultiPartRequest" scope="default" optional="true" />
<constant name="struts.multipart.handler" value="requestParser" />

</div>

 下面就可以正常使用了,建立两个action,一个用来接收上传文件,以及对接收的文件作相应处理,处理完成后,在return SUCCESS之前去除session中currentUploadStatus属性,一个用来为页面读取实时上传进度服务,这个类中只要将session中的currentUploadStatus对象拿出来按照相应格式返回给客户端即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • struts2实现文件上传显示进度条效果
  • Struts2实现文件上传时显示进度条功能
  • Struts2 文件上传进度条的实现实例代码
  • struts2实现文件上传显示进度条效果
  • Struts2实现文件上传时显示进度条功能
  • Struts2 文件上传进度条的实现实例代码

相关文章

  • 2017-05-28JAVA 多线程爬虫实例详解
  • 2017-05-28spring-boot整合dubbo:Spring-boot-dubbo-starter
  • 2017-05-28Spring Boot(五)之跨域、自定义查询及分页
  • 2017-05-28springboot中thymeleaf模板使用详解
  • 2017-05-28JVM 方法调用之静态分派(详解)
  • 2017-05-28详解在spring boot中配置多个DispatcherServlet
  • 2017-05-28Java定时器问题实例解析
  • 2017-05-28java 进制转换实例详解
  • 2017-05-28Spring Boot启动过程完全解析(二)
  • 2017-05-28TreeSet详解和使用示例_动力节点Java学院整理

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Java编程中的HashSet和BitSet详解
    • 个人模拟面试之基础知识+部分线程问题
    • Java高级特性(基础)
    • 深入理解Spring中bean的生命周期介绍
    • Java Reference源码解析
    • Spring Boot使用Druid和监控配置方法
    • MyBatis入门之增删改查+数据库字段和实体字段不一致问题处理方法
    • 详解Spring框架之基于Restful风格实现的SpringMVC
    • Spring MVC--拦截器实现和用户登陆例子
    • 详解Spring Boot 定时任务的实现方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有