在项目中使用的是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
相关推荐
在Spring MVC框架中实现文件上传并提供进度条功能是一项实用且复杂的任务,涉及到前端与后端的交互以及数据传输过程的监控。以下是对这个主题的详细解析。 首先,我们需要理解Spring MVC的基本工作原理。Spring MVC...
基于springmvc实现文件上传下载 基于AOP的日志功能基于springmvc实现文件上传下载 基于AOP的日志功能基于springmvc实现文件上传下载 基于AOP的日志功能基于springmvc实现文件上传下载 基于AOP的日志功能基于...
在SpringMVC框架中,实现文件的上传与下载是常见的需求。IntelliJ IDEA作为流行的Java开发集成环境,为开发者提供了高效便捷的开发体验。在这个项目中,我们使用IDEA来构建一个基于SpringMVC的系统,实现了文件的...
然而,由于SpringMVC上传过程中无法直接获得单个文件的大小,也无法配置单个文件的最大大小限制,因此在客户端实现上存在一定的局限性。一种可能的改进方案是在客户端模拟多文件上传的过程,但实际上每次只上传一个...
在本文中,我们将深入探讨如何使用SpringMVC和Ajax实现多文件上传并显示上传进度条的功能。这是一个在Web开发中常见的需求,特别是在处理大文件或批量上传时,用户界面的实时反馈至关重要,以提供更好的用户体验。 ...
在这个特定的项目"springmvc上传文件实时显示进度条"中,我们关注的是如何在文件上传过程中为用户展示进度信息,以提高用户体验。这个项目适用于那些需要处理大文件上传并希望提供反馈的Web应用。 首先,要实现文件...
在这个实例中,我们将关注如何处理文件上传以及如何通过监听器接口实现进度条功能。 首先,让我们从Spring MVC的文件上传开始。在Spring MVC中,文件上传主要依赖于`CommonsMultipartResolver`解析器,这是Spring...
总结,通过Ajax与SpringMVC的结合,我们可以实现文件上传过程中前端的进度条显示。关键在于利用Ajax的异步特性,监听文件上传的进度,并通过自定义后端组件将这些信息传递回前端。这样的设计不仅提升了用户体验,也...
本实验报告将详细阐述如何利用SpringMVC实现文件上传与下载的功能。 首先,文件上传的核心在于HTML表单(form)的正确配置。在创建用于上传文件的表单时,需要指定`enctype`属性为`multipart/form-data`。这是因为...
在这个“SpringMVC文件上传,多文件上传实例”中,我们将深入探讨如何在SpringMVC环境中实现文件上传功能,包括单个文件上传以及多个文件的批量上传。 1. **文件上传原理**: 文件上传是通过HTTP协议的POST请求来...
### SpringMVC 实现单个文件上传功能 #### 一、背景介绍 在现代Web应用开发中,文件上传是一项常见的需求。SpringMVC作为Spring框架的一部分,提供了强大的支持来处理文件上传任务。本文将详细介绍如何在SpringMVC...
在本项目中,我们主要探讨的是如何利用WebUploader插件结合SpringMVC框架来实现大文件及多文件的上传功能。这是一个常见的需求,特别是在需要用户提交大量数据或媒体内容的Web应用中。以下是对相关知识点的详细说明...
在本项目中,我们利用 SpringMVC 实现了文件上传的功能,并将这些文件存储到七牛云存储服务上。 首先,我们需要了解 SpringMVC 中的文件上传机制。在 SpringMVC 中,文件上传是通过 `CommonsMultipartResolver` ...
在本文中,我们将探讨如何使用Spring MVC和Ajax技术实现文件上传,并且在上传过程中展示进度条。这个功能对于用户交互性非常关键,因为它提供了更好的用户体验,让用户知道文件上传的状态。 首先,让我们从前端部分...
在SpringMVC中实现文件上传是一项常见的任务,它允许用户通过表单将本地文件发送到服务器进行存储或处理。这个"SpringMVC文件上传Demo代码"是一个实例,演示了如何配置和使用SpringMVC来实现这一功能。 首先,我们...
以下将详细介绍如何利用SpringMVC实现文件上传、下载以及文件列表展示和删除。 **一、文件上传** 1. **配置MultipartResolver**:SpringMVC默认不支持文件上传,我们需要添加`CommonsMultipartResolver`作为解析器...
在这个"springMVC图片上传示例"项目中,我们将深入探讨如何在SpringMVC环境中实现图片附件的上传功能,包括多图上传、图片预览及文本域传值。 一、SpringMVC概述 SpringMVC是Spring框架的一部分,它遵循模型-视图-...
当我们将两者结合,特别是在文件上传场景下,我们就可以实现一个动态的、用户友好的上传文件进度条。 标题"extjs java 上传文件进度条"所涉及的知识点主要涵盖以下几个方面: 1. **ExtJS组件库**:ExtJS的核心在于...
本项目"springmvc文件上传练习项目"旨在提供一个实践平台,帮助开发者掌握如何使用Spring MVC处理Multipart类型的请求,实现文件和图片的上传。下面我们将深入探讨相关知识点。 1. **MultipartHttpServletRequest...
通过springmvc5.3.16+layui2.8.11版本实现文件上传及精度条提示。上传文件之后将上传成功的文件从页面删除,通过CommonsMultipartResolver和MultipartHttpServletRequest关键类实现多文件的捕获,通过transferTo实现...