SpringMVC实现文件上传进度条
来源:互联网 发布:推理电影 知乎 编辑:程序博客网 时间:2024/06/05 18:44
public voidsetprogressListener(ProgressListener pListener)
listener= pListener;
ProgressListener是一个接口,我们需要自己实现它的update方法,参数pBytesRead表示已经上传到服务器的字节数,pContentLength表示所有文件的总大小,pItems表示第几个文件:
{
return newServletFileUpload(fileItemFactory);
}
我们要做的就是实现ProgressListener类
public classFileUploadListener implements ProgressListener {
private longnum100Ks = 0;
private longtheBytesRead = 0;
private longtheContentLength = -1;
private intwhichItem = 0;
private intpercentDone = 0;
private booleancontentLengthKnown = false;
public voidupdate(long bytesRead, long contentLength, int items){
if(contentLength > -1) {
contentLengthKnown = true;
}
theBytesRead =bytesRead;
theContentLength= contentLength;
whichItem =items;
long nowNum100Ks= bytesRead / 100000;
if (nowNum100Ks> num100Ks) {
num100Ks =nowNum100Ks;
if(contentLengthKnown) {
percentDone =(int) Math.round(100.00 * bytesRead / contentLength);
}
}
}
public int getPercentDone(){
return percentDone;
}
}
SpringMVC没有实现监听器,所以如果要监听的话得自己扩展CommonsMultipartResolver类,在newFileUpload里面加入代码设置自己实现的监听器:
public classCommonsMultipartResolverExt extends CommonsMultipartResolver{
privateHttpServletRequest request;
@Override
protected FileUpload newFileUpload(FileItemFactoryfileItemFactory)
{
ServletFileUpload upload = newServletFileUpload(fileItemFactory);
upload.setSizeMax(-1);
if(request!=null)
{
///System.out.println("注入监听");
FileUploadListener uploadProgressListener = newFileUploadListener();
upload.setProgressListener(uploadProgressListener);
HttpSessionsession = request.getSession();
session.setAttribute("uploadProgressListener",uploadProgressListener);
}
returnupload;
}
@Override
publicMultipartHttpServletRequest resolveMultipart(HttpServletRequestrequest) throws MultipartException {
}
建一个servlet用ajax去取进度就可以了
public classProgressServlet extends HttpServlet {
private staticfinal long serialVersionUID = 1L;
public voiddoGet(HttpServletRequest request, HttpServletResponse response)throws IOException {
doPost(request,response);
}
public voiddoPost(HttpServletRequest request, HttpServletResponse response)throws IOException {
response.setContentType("text/html");
response.setHeader("Cache-Control","no-cache");
PrintWriter out= response.getWriter();
HttpSessionsession = request.getSession(true);
if (session ==null) {
out.println("Sorry, session is null"); // justto be safe
return;
}
FileUploadListener uploadProgressListener =(FileUploadListener)session.getAttribute("uploadProgressListener");
if(uploadProgressListener == null) {
out.println("Progress listener isnull");
return;
}
intret=uploadProgressListener.getPercentDone();
System.out.println("new->:"+String.valueOf(ret));
out.println(ret);
}
}
- 在Spring的配置文件中添加
Xml代码 - id="multipartResolver"class="net.gkyh.filter.CommonsMultipartResolver
Ext"> - name="defaultEncoding"
value="UTF-8" />
SpringController
@RequestMapping(value="/AppUpload.action",method=RequestMethod.POST)
publicModelAndView Upload(HttpServletRequest request,HttpServletResponseresponse,
@RequestParam("flag")String flag,ModelMapmodelMap){
try
{
Stringpath=request.getSession().getServletContext().getRealPath("/");
path=path.substring(0,path.length()-1);
path=path.substring(0,p);
path=path.replace("\","/");
StringfolderPath=path+"/ftp/upload/";
MultipartHttpServletRequestmultipartRequest = (MultipartHttpServletRequest) request;
InputStreamstream = file.getInputStream();
String fileName= file.getOriginalFilename();
//System.out.println(fileName);
}
catch(Exceptione) {
e.printStackTrace();
}
return newModelAndView("/appupload",modelMap);
}
jsp页面
<SCRIPTtype=text/javascript>
functiondoProgressLoop(prog, max, counter) {
counter =counter + 1;
document.getElementByIdx_x_x('progressBarText').innerHTML= 'upload in progress: ' + prog + '%';
document.getElementByIdx_x_x('progressBarBoxContent').style.width= parseInt(prog) + '%';
}
functiongetProgress() {
$.ajax({
}
functionfSubmit()
{
var button =window.document.getElementByIdx_x_x("submitButton");
button.disabled =true;
var max =100;
var prog =0;
var counter= 0;
document.getElementByIdx_x_x('progressBar').style.display= 'block';
document.getElementByIdx_x_x('progressBarText').innerHTML= 'upload in progress: 0%';
getProgress();
doProgressLoop(prog, max,counter);
document.getElementByIdx_x_x("form1").submit();
}
</SCRIPT>
<formname="form1" id="form1" action="AppLoad.action" method="post"enctype="multipart/form-data">
<span>选择文件</span>
<divstyle="padding-bottom:5px;">
<inputtype="file" size="48" name="filedata"id='filedata'>
</div>
<divid="progressBar" style="display:none;">
<divid="theMeter">
<divid="progressBarText"></div>
<divid="progressBarBox"style="color:Silver;border-width:1px;border-style:Solid;width:300px;TEXT-ALIGN:left">
<divid="progressBarBoxContent" style="background-color:#3366FF;height:15px;width:0%;TEXT-ALIGN:left"></div>
</div>
<divid="progress-content" style="display:none;"></div>
</div>
</div>
<INPUT id='submitButton' tabIndex=3type=button value="提交" onclick='fSubmit();'>
</form>
以下链接是servlet上传文件进度实例,本文使用了部分内容
http://www.avajava.com/tutorials/lessons/how-do-i-display-file-upload-progress-using-the-dojo-progressbar.html?page=1
- SpringMVC实现文件上传进度条
- 基于SpringMVC文件上传服务器端进度条实现
- 基于SpringMVC文件上传服务器端进度条实现
- 基于SpringMVC文件上传服务器端进度条实现
- Springmvc文件上传,带进度条
- springMVC上传文件 带有进度条
- springmvc + h5(进度条)文件上传
- servlet、struts2、springmvc中实现带进度条的文件上传
- servlet、struts2、springmvc中实现带进度条的文件上传
- FTP+SpringMVC+Uploadify实现带进度条多文件上传
- Springmvc+uploadify实现文件带进度条批量上传
- SpringMVC实现的文件上传进度条Bootstrap展示
- springMVC是实现前台带进度条文件上传
- Springmvc+uploadify实现批量上传文件(显示进度条)
- springMVC+ajax 文件上传 带进度条
- Extjs+SpringMvc 上传文件加进度条
- SpringMVC之文件上传(进度条显示)
- springMVC+ajax 文件上传 带进度条
- debian建立pptp VPN服务器
- Redis命令总结
- debian apache反向代理
- IE6下雅黑显示
- 网页连续滚动图片
- SpringMVC实现文件上传进度条
- centos6系统默认服务
- XFrie中的AnyType2AnyTypeMap
- UVA 10417 Gift Exchanging
- CentOS 6.3 Rsync文件同步
- mysql数据库ibdata1文件瘦身
- OCP-1Z0-053-V12.02-543题
- 分享几个HTML弹出层
- centos6.3安装rtorrent