`

spring mvc文件上传实现进度条(转)

阅读更多

 

文章出自:http://my.oschina.net/xiaotian120/blog/198225

 

redmine:

1、框架采用spring mvc + mybatis
2、初始化数据脚本fileupload.sys\src\main\resources\init.sql
数据库配置文件fileupload.sys\src\main\resources\jdbc.properties
log4j配置文件fileupload.sys\src\main\resources\log4j.properties
log4j采用分错误级别进行记录日志,比如错误日志只需要在fusys_error.log下找
spring mvc配置文件:总配置--fileupload.sys\src\main\resources\spring-root-context.xml,
数据库配置文件--fileupload.sys\src\main\resources\spring\spring-db-context.xml
mvc配置文件--fileupload.sys\src\main\resources\spring\spring-mvc-context.xml
3、本地发布后就可以进行访问:http://localhost:8080/fileupload.sys

 

 

       文件上传应该大部分人都接触过,一般都是基于commons-fileupload组件来实现,SpringMVC的文件上传功能也是在commons-fileupload组件提供的功能上面做了一些包装功能,使文件上传开发更容易方便。

       看下上传效果图:


 

 

 

 

 

 

 

 

 

 

 

 

 

 

项目运行效果:

 

 

 

 

 

 

 

 

项目源码地址,发布即可用:https://github.com/wuskyfantasy/fileupload.sys

如果下载不了也可以下截fileupload.sys-master.zip附件。

项目使用spring mvc+mybatis实现,数据库采用mysql,具体参考README就可以发布起来。 

 

一、实现普通文件上传

        我们知道,类DispatcherServlet是SpringMVC的入口,在其doDispatch方法里面,我们可以看到它会先去检查有没配置multipartResolver 

 

 

 

 

 

 

 

 

 

如果有的话会先执行它的resolveMultipart方法:

 

 

 

 

 

 

 

 

 

 

 

 

 

因此,我们在配置文件中添加:

 

 

 

 

 

则可使用SpringMVC自带的CommonsMultipartResolver实现多个文件上传的功能。
  

 二、实现进度条
        现在实现带进度条的文件上传一般都是在客户端用flash上传组件计算,或者是通过客户端插件的方式。前者上传组件有大小的限制,后者对于我们系统来说实现过于复杂,开发难度稍大。因此我们采用服务器端计算文件上传进度,客户端轮询的方式。

Commons-fileupload组件自带了文件上传进度的监听器,类FileUploadBase提供了它的set方法。

ProgressListener是一个接口,我们需要自己实现它的update方法,参数pBytesRead表示已经上传到服务器的字节数,pContentLength表示所有文件的总大小,pItems表示第几个文件:

 

 

 

 

 

 

 

 

 

 

文件上传进度监听器实现类,FileUploadProgressListener.java

 

  SpringMVC没有实现监听器,所以如果要监听的话得自己扩展CommonsMultipartResolver类,在newFileUpload里面加入代码设置自己实现的监听器: 

 

 

 

 

 

 

ServletFileUploadExt是对ServletFileUpload类进行的扩展,后面会提到。这样在文件上传的过程中,监听器将得到通知已上传的字节数:


 

 

 

 

 

 

 

 

 

 

 

 

 

自己实现的Resolver类为CustomMultipartResolver,在这个类中需要在每一次上传请求中设定处理上传进度的监听器,并处理文件上传。 

protected FileUpload newFileUpload(FileItemFactory fileItemFactory) {  
  ServletFileUpload upload = new ServletFileUpload(fileItemFactory);  
  upload.setSizeMax(-1);  
  if (request != null) {  
     HttpSession session = request.getSession();
     //注意:这里的listener不能公用,即不能放到方法外面
     FileUploadProgressListener progressListener = 
     new FileUploadProgressListener(session);
     upload.setProgressListener(progressListener);  
  }  
  return upload;  
}

 

在配置文件spring-mvc-context.xml中配置使用自定义的Resolver。 

<bean id="multipartResolver"   class="com.sunshine.fusys.controllers.CustomMultipartResolver">
    <property name="defaultEncoding" value="UTF-8" />
    <property name="maxUploadSize" value="1000000000000" />
</bean>

 

最终在上传时,会通过commons-fileupload的组件进行上传时,会把上传进度读取到设定的session中,最后通过一个controller访问这个设定的进度值,就可以获取了。获取进度的controller为ProgressController。客户端采用异步的方式获取进度信息进行展示,具体参考源码index-userFile.jsp

 

、取消文件上传
        取消文件上传实现方式为上传时保存上传输入流的引用,取消时关闭流,让输入流产生IO异常或者数组越界异常,同时捕获这些异常,则可取消文件上传。

最后补一个配置,spring mvc的项目访问时默认访问某个指定页面或者controller的配置如下:

 

//转向controller
<mvc:view-controller path="/"  view-name="redirect:/indexMain/index" />

或者 

 

//转向index.jsp
<mvc:view-controller path="/"  view-name="/index" />

具体可参考配置文件:spring-mvc-context.xml 

 

感谢此文章作者提供这么好的资源

 

  • 大小: 16.6 KB
  • 大小: 86.3 KB
  • 大小: 13.1 KB
  • 大小: 8.8 KB
  • 大小: 19.4 KB
  • 大小: 15.5 KB
  • 大小: 10 KB
  • 大小: 10.5 KB
  • 大小: 5.8 KB
分享到:
评论
4 楼 suxj16 2016-12-30  
部署之后启动有问题
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [spring/spring-db-context.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [E:\apache-tomcat-8.0.29\webapps\fileupload.sys\WEB-INF\classes\mybatis-mapping\UserFile-mapper.xml]'; nested exception is java.lang.RuntimeException: Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class . Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'userFileDTO'.  Cause: java.lang.ClassNotFoundException: Cannot find class: userFileDTO

不知道怎么解决,求解答。
3 楼 suxj16 2016-12-29  
谢谢分享。
部署之后启动有问题
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [spring/spring-db-context.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [E:\apache-tomcat-8.0.29\webapps\fileupload.sys\WEB-INF\classes\mybatis-mapping\UserFile-mapper.xml]'; nested exception is java.lang.RuntimeException: Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class . Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'userFileDTO'.  Cause: java.lang.ClassNotFoundException: Cannot find class: userFileDTO

不知道怎么解决
2 楼 孑灬磊 2016-08-24  
   
1 楼 nizhihe 2016-03-01  
             

相关推荐

    spring mvc文件上传实现进度条

    在Spring MVC框架中,文件上传是一项常见的功能,而实现文件上传进度条则能提供更好的用户体验。这个场景通常涉及到前端的JavaScript或jQuery库(如jQuery File Upload)与后端的Spring MVC控制器之间的交互,以及...

    spring mvc html5带进度条上传的例子.zip

    在本示例中,"spring mvc html5带进度条上传的例子" 展示了如何在Spring MVC中集成HTML5的新特性,特别是文件上传功能,以及如何在上传过程中展示进度条以提升用户体验。 HTML5中的`&lt;input type="file"&gt;`元素提供了...

    spring mvc上传文件

    在本文中,我们将深入探讨如何使用Spring MVC框架与Ajax技术结合来实现文件上传的功能。Spring MVC是Spring框架的一部分,提供了一种模型-视图-控制器(MVC)架构模式,用于构建Web应用程序。Ajax(Asynchronous ...

    spring mvc 上传文件显示进度

    在Spring MVC中实现文件上传并显示进度是一项常见的需求,特别是在用户需要等待较长时间的大型文件上传时。这个功能可以通过监听文件上传的进度并在前端实时更新来提升用户体验。下面将详细介绍如何利用Spring MVC...

    springmvc图片上传带进度条实例

    在本文中,我们将深入探讨如何使用Spring MVC框架创建一个图片上传功能,并且集成进度条来实时展示上传进度。...这个实例可以帮助开发者理解如何在实际项目中结合Spring MVC实现文件上传与进度显示功能。

    spring+ajax+velocity实现进度条上传

    实现“spring+ajax+velocity实现进度条上传”的步骤如下: 1. **配置Spring MVC**:在Spring的配置文件中,我们需要定义一个处理器映射器和视图解析器,以便Spring能正确地处理请求和返回响应。同时,需要设置Multi...

    spring jquery实现进度条

    本教程将详细讲解如何利用Spring和jQuery来实现文件上传过程中显示进度条的功能,提升用户的操作体验。 首先,我们需要理解文件上传的基本流程。当用户选择一个文件进行上传时,浏览器会创建一个XMLHttpRequest对象...

    Spring MVC 文件上传下载 后端 - Java.zip

    这个压缩包“Spring MVC 文件上传下载 后端 - Java.zip”很可能包含了关于如何在Spring MVC中实现文件上传和下载功能的详细教程或代码示例。以下是对这些知识点的详细讲解: 1. **文件上传** - **Commons ...

    Spring MVC实现文件的上传和下载

    通过以上步骤,你可以利用Spring MVC轻松实现文件的上传和下载功能。实际开发中,还需要结合具体需求,例如添加权限控制、进度条显示等。对于更复杂的场景,可能需要引入额外的库,如Apache Commons FileUpload,以...

    ssm文件上传,带进度条

    在这个"ssm文件上传,带进度条"的项目中,我们将探讨如何在SSM框架下实现文件上传并显示上传进度。 1. **文件上传组件** 在Java Web中,文件上传通常使用`Commons FileUpload`库或Spring MVC的`MultipartFile`接口...

    spring mvc uploadify上传文件

    Spring MVC是Spring框架的一部分,专门用于构建Web应用程序,而uploadify是一款前端JavaScript插件,使得用户能够在浏览器端实现文件上传的便捷操作。 ### 1. Spring MVC 文件上传基础 Spring MVC提供了`@...

    springmvc带进度条上传源码

    在Spring MVC框架中实现文件上传并提供进度条功能是一项实用且复杂的任务,涉及到前端与后端的交互以及数据传输过程的监控。以下是对这个主题的详细解析。 首先,我们需要理解Spring MVC的基本工作原理。Spring MVC...

    spring mvc ajax异步文件的上传和普通文件上传

    在Spring MVC框架中,文件上传是一项常见的功能,无论是普通的文件上传还是通过Ajax实现的异步文件上传,都为用户提供了更好的交互体验。本篇将详细讲解这两种方式的实现原理及步骤。 首先,让我们来理解一下普通...

    JAVA -jquery 文件上传带进度条

    在Java和jQuery的世界里,实现文件上传带进度条的功能是一项常见的需求,特别是在用户交互体验日益重要的今天。这个功能可以提供给用户一个实时反馈,让他们了解文件上传的状态,从而提升用户体验。接下来,我们将...

    ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签)

    这里的文件上传功能被封装成了一个自定义标签,使得开发者在其他地方只需要简单地插入这个标签,就能实现文件上传并展示进度。 7. **jar2**: 压缩包中的`jar2`可能是项目中使用到的一些库文件或工具,例如Struts2...

    spring mvc上传 下载

    至于文件下载,Spring MVC提供了`ResponseEntity`和`HttpHeaders`类来构造HTTP响应,以实现文件流的下载。下面是一个典型的文件下载Controller方法: ```java @GetMapping("/download/{filename}") public Response...

    ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签

    这样在其他页面中,只需要插入这个标签,就可以实现文件上传并显示进度条。 在实际应用中,这样的文件上传功能对于用户来说非常友好,因为它提供了实时的反馈,提高了用户体验。同时,SSH框架的使用确保了代码的...

    spring MVC + bootstrap实现文件上传示例(带进度条)

    在本文中,我们将深入探讨如何使用Spring MVC和Bootstrap框架实现一个具有进度条功能的文件上传示例。这个功能对于提供用户友好的Web应用至关重要,因为它可以让用户了解文件上传的进度,提升用户体验。 首先,我们...

    WEB超大文件带进度条上传

    本话题将围绕"WEB超大文件带进度条上传"这个主题,详细介绍Java如何实现这一功能。 一、断点续传原理 断点续传是一种允许用户中断文件传输后从上次中断的地方继续传输的技术,尤其适用于网络环境不稳定或文件体积...

    struts2(ssh)带进度条文件上传 demo 的jar包1

    在Struts2中,实现文件上传功能是非常常见的需求,而带进度条的文件上传则可以提供更好的用户体验,让用户了解文件上传的进度,减少用户的等待焦虑感。 Struts2的文件上传主要依赖于Apache的Commons FileUpload库。...

Global site tag (gtag.js) - Google Analytics