`
lvjun106
  • 浏览: 436838 次
  • 性别: Icon_minigender_1
  • 来自: 芜湖
社区版块
存档分类
最新评论

spring mvc 实现上传文件进度条

阅读更多

一、实现org.apache.commons.fileupload.ProgressListener接口

import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.ProgressListener;
import org.springframework.stereotype.Component;

import com.chinalife.cip.web.multipart.model.Progress;

@Component
public class FileUploadProgressListener implements ProgressListener {
	private HttpSession session;

	public void setSession(HttpSession session){
		this.session=session;
		Progress status = new Progress();
		session.setAttribute("status", status);
	}

	/*
	 * pBytesRead 到目前为止读取文件的比特数 pContentLength 文件总大小 pItems 目前正在读取第几个文件
	 */
	public void update(long pBytesRead, long pContentLength, int pItems) {
		Progress status = (Progress) session.getAttribute("status");
		status.setpBytesRead(pBytesRead);
		status.setpContentLength(pContentLength);
		status.setpItems(pItems);
	}

}

 


二、扩展org.springframework.web.multipart.commons.CommonsMultipartResolver类,重写public MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException方法

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.multipart.MultipartException;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import com.chinalife.cip.web.multipart.listener.FileUploadProgressListener;

public class CustomMultipartResolver extends CommonsMultipartResolver {
	@Autowired
	private FileUploadProgressListener progressListener;
	
	public void setFileUploadProgressListener(FileUploadProgressListener progressListener){
		this.progressListener=progressListener;
	}
	
	@Override
	@SuppressWarnings("unchecked")
	public MultipartParsingResult parseRequest(HttpServletRequest request)
			throws MultipartException {
		String encoding = determineEncoding(request);
		FileUpload fileUpload = prepareFileUpload(encoding);
		progressListener.setSession(request.getSession());
		fileUpload.setProgressListener(progressListener);
		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);
		}
	}
}

 


三、mvc命名空间声明

<bean id="multipartResolver" class="com.chinalife.cip.web.multipart.CustomMultipartResolver">
	<property name="maxUploadSize" value="50000000" />
</bean>

 


四、获取文件controller编写

@RequestMapping(...)
public String uploadFile(@RequestParam(value = "file") MultipartFile... files) throws IOException {
	for (MultipartFile f : files) {
		if (f.getSize() > 0) {
			File targetFile = new File("目标文件路径及文件名");
			f.transferTo(targetFile);//写入目标文件
		}
	}
	return "...";
}

 


五、文件进度controller编写

import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;

import com.chinalife.cip.web.multipart.model.Progress;

@Controller
@SessionAttributes("status")
public class ProgressController {

	@RequestMapping(value = "/upfile/progress", method = RequestMethod.POST )
	@ResponseBody
	public String initCreateInfo(Map<String, Object> model) {
		Progress status = (Progress) model.get("status");
		if(status==null){
			return "{}";
		}
		return status.toString();
	}
}

 


分享到:
评论

相关推荐

    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轻松实现文件的上传和下载功能。实际开发中,还需要结合具体需求,例如添加权限控制、进度条显示等。对于更复杂的场景,可能需要引入额外的库,如Apache Commons FileUpload,以...

    spring mvc 上传文件显示进度

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

    spring mvc uploadify上传文件

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

    springmvc图片上传带进度条实例

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

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

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

    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 ...

    springmvc带进度条上传源码

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

    extjs java 上传文件进度条

    当我们将两者结合,特别是在文件上传场景下,我们就可以实现一个动态的、用户友好的上传文件进度条。 标题"extjs java 上传文件进度条"所涉及的知识点主要涵盖以下几个方面: 1. **ExtJS组件库**:ExtJS的核心在于...

    ssm文件上传,带进度条

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

    spring mvc上传 下载

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

    WEB超大文件带进度条上传

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

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

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

    用SSH+ajax实现的上传进度条,仿qq邮箱的大文件上传窗体

    在本例中,主要利用Ajax技术实现文件上传过程中的异步通信,实时获取上传进度。 **3. 文件上传原理** 文件上传涉及两个关键的服务类: - **上传服务类**:负责接收客户端上传的文件,并将其保存到服务器上。同时...

    JAVA -jquery 文件上传带进度条

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

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

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

Global site tag (gtag.js) - Google Analytics