Java DWR Extjs Servlet 文件上传 进度条

本文介绍如何结合Java Servlet、DWR和Extjs实现文件上传功能,并添加进度条显示。通过FileProgressListener、UpLoadServlet等组件,展示了从上传页面到文件上传完成的流程,同时指出了未处理的大文件、文件大小判断和断点续传等问题。
摘要由CSDN通过智能技术生成

上一篇博文里面详细介绍了Java Servlet 文件上传,这篇博文将为文件上传添加进度条,其中会利用DWR和Extjs。

1、项目的结构图

(1)要导入相应的JAR包和EXTJS文件。

(2)FileProgressListener

package com.fileupload;

import java.util.Collection;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.ProgressListener;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.ServerContext;
import org.directwebremoting.ServerContextFactory;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory.WebContextBuilder;
import org.directwebremoting.impl.DefaultWebContextBuilder;

public class FileProgressListener implements ProgressListener {
	private long last_percentage = 0;	
	private long percentage = 0;	
	private HttpServletRequest request;	
	private HttpServletResponse response;
	
	public FileProgressListener(HttpServletRequest request, HttpServletResponse response){
		this.request = request;
		this.response = response;
	}
	
	public void update(long pBytesRead, long pContentLength, int pItems) {
		percentage = (pBytesRead * 100) / pContentLength;
		if(percentage > 0 && percentage % 5 == 0 && percentage > last_percentage){
			last_percentage = percentage;
			System.out.println("已完成"+percentage+"%,文件大小是:"+pContentLength);
			updateProgress(percentage);
		}
	}

	/**
	 * 向页面index.jsp推送文件上传完成的百分比,推送到方法refreshProgress中。
	 * @param percentage
	 */
	public void updateProgress(long percentage){
		ScriptBuffer scriptBuffer = new ScriptBuffer();
		scriptBuffer.appendScript("try{");
		scriptBuffer.appendScript("if(refreshProgress){");
		scriptBuffer.appendScript("refreshProgress");
		scriptBuffer.appendScript("(");
		scriptBuffer.appendData(percentage);
		scriptBuffer.appendScript(")}");
		scriptBuffer.appendScript("} catch(e){alert(e)}");
		
		ServerContext sc = ServerContextFactory.get();
        WebContextBuilder webBuilder = new DefaultWebContextBuilder();
        webBuilder.engageThread(sc.getContainer(), request, response);
		WebContext webContext = webBuilder.get();
		if(webContext == null){
			return;
		}
		
		Collection<ScriptSession> sessions = webContext.getScriptSessionsByPage("/FileUpload/index.jsp");
		if (sessions == null || sessions.isEmpty()) {
			return;
		}

		for (ScriptSession scriptSession : sessions) {
			if (scriptSession != null) {
				scriptSession.addScript(scriptBuffer);
			}
		}
	}
	
	public void setPercentage(long percentage) {
		this.percentage = percentage;
	}

	public long getPercentage() {
		return percentage;
	}

}
</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值