一、实现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 html5带进度条上传的例子,ECLIPSE MAVEN 工程,带前端和后台
Spring MVC实现个人网盘, 上传,下载,支持进度条asdfsdf
该demo基于springmvc,监听spring的processerListener接口,实现对上传数据的更新,同时采用进度条显示当前上传情况。
本篇文章主要介绍了spring MVC + bootstrap实现文件上传示例(带进度条),非常具有使用价值,有需要的朋友可以了解一下。
【源码】mysql版本_spring3.0 系统模块 1....服务器内部GET POST 请求 25.uploadify 上传插件,单条、批量上传,带进度条,异步,图片、视频, 其它文件格式均可上传 26.地图选点获取经纬度坐标,根据俩经纬度计算距离
文件上传效果类似163邮箱。使用了spring MVC作为后台。layui+jquery作为前端技术。支持多文件上传。下载后直接导入myeclipse即可使用。
【源码】oracle版本_spring3.0 系统模块 1....服务器内部GET POST 请求 25.uploadify 上传插件,单条、批量上传,带进度条,异步,图片、视频, 其它文件格式均可上传 26.地图选点获取经纬度坐标,根据俩经纬度计算距离
本篇文章主要介绍了springMVC+ajax实现文件上传且带进度条实例,具有一定的参考价值,有兴趣的可以了解一下。
这是一个基于Spring MVC和HTML5的多文件上传的实例,前端实现全部采用JavaScript完成,有进度条显示,同时有上传状态。后台由一个文件上传的Controller控制,非常方便。对不想使用插件上传的人,可以看看这个参考。
轻松实现 大文件分片上传 可控制分片长度(大小)+并发数+进度条,后台采用RandomAccessFile并发写,多分片上传完成即可打开文件,不用合并文件。 ——前端采用jquery实现参考 可自行集成到vue等前端框架 ——后端采用...
Spring MVC MyBatis druid-数据库连接池 PageHelper-Mybatis通用分页插件 FreeMarker-模板引擎 前端 Bootstrap jQuery jQuery Form Vue.js pace.js–网页自动加载进度条插件 bootstrapValidator.js-最好用的...
5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
SpringMVC | MVC框架 | [http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc](http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc) ...
5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
基于SpringBoot+MyBatis实现。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。 #### 后端技术 技术 | 说明 | 官网 ----|----|---- ...
使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标...