Spring MVC 监听文件上传进度,实现上传进度条
来源:互联网 发布:淘宝c店没有流量咋办 编辑:程序博客网 时间:2024/06/06 14:51
首先Spring是一个非常成熟的J2EE框架,其非入侵式的架构为系统的集成和扩展提供了最大的可能。所以Spring MVC下实现进度监听非常容易,甚至不需要改以前的上传业务代码,具体实现分三个步骤:1、接管CommonsMultipartResolver,重写针对文件上传的请求。2、在第一步中写入监听,以获取上传进度。3、修改上传部分的配置文件。具体见代码1、CommonsMultipartResolver代码
package com.van.utils.upload.handle;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileItemFactory;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.web.multipart.MaxUploadSizeExceededException;import org.springframework.web.multipart.MultipartException;import org.springframework.web.multipart.MultipartHttpServletRequest;import org.springframework.web.multipart.commons.CommonsMultipartResolver;import com.van.utils.upload.listener.PJProgressListener;/** * 重写CommonsMultipartResolver以监听文件上传进度 * @author Van * @date 2012-12-12 */public class PJCommonsMultipartResolver extends CommonsMultipartResolver {private HttpServletRequest request;protected FileUpload newFileUpload(FileItemFactory fileItemFactory) {ServletFileUpload upload = new ServletFileUpload(fileItemFactory);upload.setSizeMax(-1);if (request != null) {HttpSession session = request.getSession();PJProgressListener uploadProgressListener = new PJProgressListener(session);upload.setProgressListener(uploadProgressListener);}return upload;}public MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) throws MultipartException {this.request = request;// 获取到request,要用到sessionreturn super.resolveMultipart(request);} @SuppressWarnings("unchecked")@Override public MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException { HttpSession session = request.getSession(); String encoding = "utf-8"; FileUpload fileUpload = prepareFileUpload(encoding); PJProgressListener uploadProgressListener = new PJProgressListener(session); fileUpload.setProgressListener(uploadProgressListener); try { ListPJProgressListener 代码: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); } }}
package com.van.utils.upload.listener;import javax.servlet.http.HttpSession;import org.apache.commons.fileupload.ProgressListener;import com.van.utils.upload.entity.ProgressEntity;public class PJProgressListener implements ProgressListener{private HttpSession session;public PJProgressListener() {}public PJProgressListener(HttpSession _session) {session=_session;ProgressEntity ps = new ProgressEntity();session.setAttribute("upload_ps", ps);}public void update(long pBytesRead, long pContentLength, int pItems) {ProgressEntity ps = (ProgressEntity) session.getAttribute("upload_ps");ps.setpBytesRead(pBytesRead);ps.setpContentLength(pContentLength);ps.setpItems(pItems);//更新session.setAttribute("upload_ps", ps);}}上传进度信息记录实体类:
package com.van.utils.upload.entity;/** * 文件上传进度信息 * @author Van * */public class ProgressEntity {private long pBytesRead = 0L;private long pContentLength = 0L;private int pItems;public long getpBytesRead() {return pBytesRead;}public void setpBytesRead(long pBytesRead) {this.pBytesRead = pBytesRead;}public long getpContentLength() {return pContentLength;}public void setpContentLength(long pContentLength) {this.pContentLength = pContentLength;}public int getpItems() {return pItems;}public void setpItems(int pItems) {this.pItems = pItems;}@Overridepublic String toString() {return "ProgressEntity [pBytesRead=" + pBytesRead + ", pContentLength="+ pContentLength + ", pItems=" + pItems + "]";}}配置文件部分修改:
将org.springframework.web.multipart.commons.CommonsMultipartResolver替换成:com.van.utils.upload.handle.PJCommonsMultipartResolver
- Spring MVC 监听文件上传进度,实现上传进度条
- Spring mvc实现上传文件进度条
- spring mvc文件上传实现进度条
- Spring mvc实现文件上传及html5实现上传进度条
- spring mvc 上传文件进度条
- spring MVC + bootstrap实现文件上传(带进度条)
- 监听上传文件进度条
- jQuery监听文件上传实现进度条效果
- jQuery监听文件上传实现进度条效果
- jQuery监听文件上传实现进度条效果
- jQuery监听文件上传实现进度条效果
- spring mvc 上传文件带进度条
- ajax实现文件上传并且监听上传进度
- Spring MVC 实现文件上传
- spring MVC实现文件上传
- Spring MVC实现文件上传
- Spring mvc实现文件上传
- Spring mvc 实现文件上传
- Android入门:HTML布局中Android程序与JAVASCRIPT的交互
- 怎样写出规范的shell脚本(仅限Scripting with style)
- Android入门:使用Android自带媒体库读取MP3文件
- 墙壁光缆铺设
- 大学三年半的总结
- Spring MVC 监听文件上传进度,实现上传进度条
- H.264/5
- 从一个数组中查找和目标数最接近的或者相等的数
- 进度条
- mongodb启动出现 无法定位程序输入点
- Android 应用播放背景音乐
- google tcmalloc WIN下使用
- PN512
- 在Android应用中使用百度地图api