在项目中使用的是springmvc,在spring mvc中的上传文件的功能做的很多好,项目中使用都很方便。最近做的项目要实现上传显示上传进度,百分比;但是发现springmvc貌似没有实现这样的功能,所以就只有自己来小小的扩展一下。
springmvc中内部上传使用的是fileupload,而其实fileupload是提供了上传监控的功能的,了解了这个之后实现起来就简单了。
1. 首先跟踪一下org.springframework.web.multipart.commons.CommonsMultipartResolver这个类默认的实现,最后发现在parseRequest这个方法中能够获取到FileUpload对象
2. 创建一个类MultipartListenerResolver,继承CommonsMultipartResolver,覆盖方法parseRequest
- public class MultipartListenerResolver extends CommonsMultipartResolver {
- @Override
- protected MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException {
- String encoding = determineEncoding(request);
- FileUpload fileUpload = prepareFileUpload(encoding);
- //设置监听器
- fileUpload.setProgressListener(new FileUploadProgressListener(request.getSession()));
- try {
- List<FileItem> fileItems = ((ServletFileUpload) fileUpload).parseRequest(request);
- return parseFileItems(fileItems, encoding);
- } catch (FileUploadBase.SizeLimitExceededException ex) {
- throw new MaxUploadSizeExceededException(fileUpload.getSizeMax(), ex);
- } catch (FileUploadException ex) {
- throw new MultipartException("Could not parse multipart servlet request", ex);
- }
- }
- }
3. 创建监听器类FileUploadProgressListener,构造方法接收一个session对象,把当前上传的进度发入到session中
- public class FileUploadProgressListener implements ProgressListener {
- private HttpSession session;
- public FileUploadProgressListener(HttpSession session) {
- this.session = session;
- }
- //pBytesRead 已经上传的大小
- //pContentLength 文件总大小
- @Override
- public void update(long pBytesRead, long pContentLength, int pItems) {
- System.out.println((double)pBytesRead/pContentLength);
- session.setAttribute("progress", (double)pBytesRead/pContentLength);
- }
- }
4. 最后就可以直接对外提供一个接口来从session中读取上传的进度,前台通过ajax来访问
转自: http://silentwu.iteye.com/blog/2142530
相关推荐
springmvc带进度条上传源码
基于springmvc实现文件上传下载 基于AOP的日志功能基于springmvc实现文件上传下载 基于AOP的日志功能基于springmvc实现文件上传下载 基于AOP的日志功能基于springmvc实现文件上传下载 基于AOP的日志功能基于...
SpringMVC 文件上传 进度条 java
ajax上传文件,ajax实现进度条,及springMvc上传文件实现进度条
导入eclipse中,运行项目即可,上传文件限制不能超过2G,如果要修改则自己在springmvc.xml文件中修改配置
SpringMVC+Ajax实现多个文件上传带进度条
该demo基于springmvc,监听spring的processerListener接口,实现对上传数据的更新,同时采用进度条显示当前上传情况。
JavaEE企业级开发-----SpringMVC实现 文件的上传下载实验报告
SpringMVC文件上传与下载的实现,包括UploadController和DownloadController
本篇文章主要介绍了springMVC+ajax实现文件上传且带进度条实例,具有一定的参考价值,有兴趣的可以了解一下。
springmvc中实现文件上传所要用到的jar包
这里是由Intelli IDEA 搭建的SpringMVC 系统, 实现了简单的文件上传下载功能
springmvc上传文件controller,vue
SpringMVC文件上传Demo代码
使用SpringMVC实现文件列表展示,文件上传,文件下载和文件删除
springmvc实现文件上传和下载,里面有2个页面,一个是上传页面,一个是下载列表页面,用的是springmvc控制器,比较简单实现,欢迎下载!
极客学院java中级课程,SpringMVC系列教材——SpringMVC 实现文件上传下载、国际化等
通过springmvc5.3.16+layui2.8.11版本实现文件上传及精度条提示。上传文件之后将上传成功的文件从页面删除,通过CommonsMultipartResolver和MultipartHttpServletRequest关键类实现多文件的捕获,通过transferTo实现...
上传文件显示进度条springmvc配置监听器
SpringMVC实现用户角色管理(springmvc角色权限管理) SpringMVC用户管理实现 通过SpringMVC与JSP实现用户角色管理 SpringMVC实现用户角色管理(springmvc角色权限管理