校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 利用jsp+Extjs實現(xiàn)動態(tài)顯示文件上傳進度

利用jsp+Extjs實現(xiàn)動態(tài)顯示文件上傳進度

熱門標簽:電銷機器人是有一些什么技術(shù) 四川保險智能外呼系統(tǒng)商家 地圖標注線上教程 北票市地圖標注 電銷機器人好賣么 杭州ai語音電銷機器人功能 商洛電銷 杭州語音電銷機器人軟件 高德地圖標注樣式

需求來源是這樣的:上傳一個很大的excel文件到server, server會解析這個excel, 然后一條一條的插入到數(shù)據(jù)庫,整個過程要耗費很長時間,因此當用戶點擊上傳之后,需要顯示一個進度條,并且能夠根據(jù)后臺的接收的數(shù)據(jù)量和處理的進度及時更新進度條。

分析:后臺需要兩個組件,uploadController.jsp用來接收并且處理數(shù)據(jù),它會動態(tài)的把進度信息放到session,另一個組件processController.jsp用來更新進度條;當用戶點“上傳”之后,form被提交給uploadController.jsp,同時用js啟動一個ajax請求到processController.jsp,ajax用獲得的進度百分比更新進度條的顯示進度,而且這個過程每秒重復一次;這就是本例的基本工作原理。

現(xiàn)在的問題是server接收數(shù)據(jù)的時候怎么知道接收的數(shù)據(jù)占總數(shù)據(jù)的多少? 如果我們從頭自己寫一個文件上傳組件,那這個問題很好解決,關(guān)鍵是很多時候我們都是用的成熟的組件,比如apache commons fileupload; 比較幸運的是,apache早就想到了這個問題,所以預留了接口可以用來獲取接收數(shù)據(jù)的百分比;因此我就用apache commons fileupload來接收上傳文件。

uploadController.jsp:

%@ page language="java" import="java.util.*, java.io.*, org.apache.commons.fileupload.*, org.apache.commons.fileupload.disk.DiskFileItemFactory, org.apache.commons.fileupload.servlet.ServletFileUpload" pageEncoding="utf-8"%>
%
//注意上面的import的jar包是必須的
//下面是使用apache commons fileupload接收上傳文件;
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//因為內(nèi)部類無法引用request,所以要實現(xiàn)一個。
class MyProgressListener implements ProgressListener{
	private HttpServletRequest request = null;
	MyProgressListener(HttpServletRequest request){
		this.request = request;
	}
	public void update(long pBytesRead, long pContentLength, int pItems) {
		double percentage = ((double)pBytesRead/(double)pContentLength);
		//上傳的進度保存到session,以便processController.jsp使用
		request.getSession().setAttribute("uploadPercentage", percentage);
	}
}
upload.setProgressListener(new MyProgressListener(request));
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
  FileItem item = (FileItem) iter.next();
  if (item.isFormField()){
  	
  } else {
    //String fieldName = item.getFieldName();
    String fileName = item.getName();
    //String contentType = item.getContentType();
    System.out.println();
    boolean isInMemory = item.isInMemory();
    long sizeInBytes = item.getSize();
    File uploadedFile = new File("c://" + System.currentTimeMillis() + fileName.substring(fileName.lastIndexOf(".")));
    item.write(uploadedFile);
  }
}
out.write("{success:true,msg:'保存上傳文件數(shù)據(jù)并分析Excel成功!'}");
out.flush();
%>


processController.jsp:

%@ page language="java" import="java.util.*" contentType = "text/html;charset=UTF-8" pageEncoding="utf-8"%>
%
	//注意上面的抬頭是必須的。否則會有ajax亂碼問題。
	//從session取出uploadPercentage并送回瀏覽器
	Object percent = request.getSession().getAttribute("uploadPercentage");
	String msg = "";
	double d = 0;
	if(percent==null){
		d = 0;
	}
	else{
		d = (Double)percent;
		//System.out.println("+++++++processController: " + d);
	}
	if(d1){
	//d1代表正在上傳,
		msg = "正在上傳文件...";
		out.write("{success:true, msg: '"+msg+"', percentage:'" + d + "', finished: false}");
	}
	else if(d>=1){
		//d>1 代表上傳已經(jīng)結(jié)束,開始處理分析excel,
		//本例只是模擬處理excel,在session中放置一個processExcelPercentage,代表分析excel的進度。
		msg = "正在分析處理Excel...";
		String finished = "false";
		double processExcelPercentage = 0.0;
		Object o = request.getSession().getAttribute("processExcelPercentage");
		if(o==null){
			processExcelPercentage = 0.0;
			request.getSession().setAttribute("processExcelPercentage", 0.0);
			
		}
		else{
			//模擬處理excel,百分比每次遞增0.1 
			processExcelPercentage = (Double)o + 0.1;
			request.getSession().setAttribute("processExcelPercentage", processExcelPercentage);
			if(processExcelPercentage>=1){
				//當processExcelPercentage>1代表excel分析完畢。
				request.getSession().removeAttribute("uploadPercentage");
				request.getSession().removeAttribute("processExcelPercentage");
				//客戶端判斷是否結(jié)束的標志
				finished = "true";
			}
		}
		out.write("{success:true, msg: '"+msg+"', percentage:'" + processExcelPercentage + "', finished: "+ finished +"}");
		//注意返回的數(shù)據(jù),success代表狀態(tài)
		//percentage是百分比
		//finished代表整個過程是否結(jié)束。
	}
	out.flush();
%>


表單頁面upload.html:

html>
	head>
		meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		title>File Upload Field Example/title>
		link rel="stylesheet" type="text/css"
			href="ext/resources/css/ext-all.css" />
		script type="text/javascript" src="ext/adapter/ext/ext-base.js"> /script>
		script type="text/javascript" src="ext/ext-all.js"> /script>
		style>
/style>
	/head>
	body>
		a >sunxing007/a>
		div id="form">/div>
	/body>
	script>
var fm = new Ext.FormPanel({
	title: '上傳excel文件',
	url:'uploadController.jsp?t=' + new Date(),
	autoScroll:true,
	applyTo: 'form',
	height: 120,
	width: 500,
	frame:false,
	fileUpload: true,
	defaultType:'textfield',
	labelWidth:200,
	items:[{
		xtype:'field',
		fieldLabel:'請選擇要上傳的Excel文件 ',
		allowBlank:false,
		inputType:'file',
		name:'file'
	}],
	buttons: [{
		text: '開始上傳',
		handler: function(){
			//點擊'開始上傳'之后,將由這個function來處理。
		  if(fm.form.isValid()){//驗證form, 本例略掉了
		  //顯示進度條
				Ext.MessageBox.show({ 
				  title: '正在上傳文件', 
				  //msg: 'Processing...', 
				  width:240, 
				  progress:true, 
				  closable:false, 
				  buttons:{cancel:'Cancel'} 
				}); 
				//form提交
    fm.getForm().submit();
    //設(shè)置一個定時器,每500毫秒向processController發(fā)送一次ajax請求
		  var i = 0;
		  var timer = setInterval(function(){
		  		//請求事例
			   Ext.Ajax.request({
			   //下面的url的寫法很關(guān)鍵,我為了這個調(diào)試了好半天
			   //以后凡是在ajax的請求的url上面都要帶上日期戳,
			   //否則極有可能每次出現(xiàn)的數(shù)據(jù)都是一樣的,
			   //這和瀏覽器緩存有關(guān)
						url: 'processController.jsp?t=' + new Date(),
						method: 'get',
						//處理ajax的返回數(shù)據(jù)
						success: function(response, options){
							status = response.responseText + " " + i++;
							var obj = Ext.util.JSON.decode(response.responseText);
							if(obj.success!=false){
								if(obj.finished){
									clearInterval(timer);	
									//status = response.responseText;
									Ext.MessageBox.updateProgress(1, 'finished', 'finished');
									Ext.MessageBox.hide();
								}
								else{
									Ext.MessageBox.updateProgress(obj.percentage, obj.msg);	
								}
							}
						},
						failure: function(){
							clearInterval(timer);
							Ext.Msg.alert('錯誤', '發(fā)生錯誤了。');
						} 
					});
		  }, 500);
		    
		  }
		  else{
		  	Ext.Msg.alert("消息","請先選擇Excel文件再上傳.");
		  }
		} 
	}]
});
/script>
/html>


把這三個文件放到tomcat/webapps/ROOT/, 同時把ext的主要文件也放到這里,啟動tomcat即可測試:http://localhost:8080/upload.html

我的資源里面有完整的示例文件:點擊下載, 下載zip文件之后解壓到tomcat/webapps/ROOT/即可測試。

最后需要特別提醒,因為用到了apache 的fileUpload組件,因此,需要把common-fileupload.jar放到ROOT/WEB-INF/lib下。
 

您可能感興趣的文章:
  • Jsp頁面實現(xiàn)文件上傳下載類代碼
  • jsp中點擊圖片彈出文件上傳界面及預覽功能的實現(xiàn)
  • jsp實現(xiàn)文件上傳下載的程序示例
  • Jsp+Servlet實現(xiàn)文件上傳下載 文件上傳(一)
  • AJAX和JSP實現(xiàn)的基于WEB的文件上傳的進度控制代碼
  • jsp文件上傳與下載實例代碼
  • jsp中點擊圖片彈出文件上傳界面及實現(xiàn)預覽實例詳解
  • jsp 文件上傳瀏覽,支持ie6,ie7,ie8
  • servlet+JSP+mysql實現(xiàn)文件上傳的方法
  • JSP實現(xiàn)文件上傳功能

標簽:丹東 貴州 紅河 云浮 江西 青島 西藏 宿州

巨人網(wǎng)絡(luò)通訊聲明:本文標題《利用jsp+Extjs實現(xiàn)動態(tài)顯示文件上傳進度》,本文關(guān)鍵詞  利用,jsp+Extjs,實現(xiàn),動態(tài),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《利用jsp+Extjs實現(xiàn)動態(tài)顯示文件上傳進度》相關(guān)的同類信息!
  • 本頁收集關(guān)于利用jsp+Extjs實現(xiàn)動態(tài)顯示文件上傳進度的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    久久精品二区亚洲w码| 成人av午夜电影| 国产成人av资源| 欧美日韩在线亚洲一区蜜芽| 国产亚洲精品bt天堂精选| 一区二区三区欧美日韩| 国产一区二区在线观看免费| 欧美在线999| 国产精品午夜在线| 国内久久精品视频| 91精品国产综合久久小美女| 最新成人av在线| 国产酒店精品激情| 日韩亚洲欧美高清| 亚洲自拍偷拍图区| 色综合天天综合在线视频| 久久精品欧美一区二区三区不卡 | 精品一区二区三区欧美| 欧美日韩一级视频| 亚洲精品视频一区| 97se狠狠狠综合亚洲狠狠| 久久久精品中文字幕麻豆发布| 日本欧美大码aⅴ在线播放| 色久优优欧美色久优优| 亚洲免费观看高清完整版在线观看| 国产精品影音先锋| 亚洲国产激情av| 国产成人综合在线| 国产农村妇女精品| 成人一二三区视频| 中文字幕不卡一区| 成人av一区二区三区| 国产精品区一区二区三区| 高清视频一区二区| 久久精品综合网| 国产高清精品在线| 国产精品污污网站在线观看| 成人国产精品免费| 一区二区三区日韩欧美精品| 欧美色精品在线视频| 午夜免费久久看| 欧美一区二区在线视频| 麻豆91免费看| 久久亚洲精华国产精华液| 国产91清纯白嫩初高中在线观看| 国产精品国产三级国产三级人妇 | 日韩一区二区免费高清| 亚洲第一电影网| 精品美女在线播放| 成人少妇影院yyyy| 亚洲欧美国产77777| 欧美日本一区二区| 国产精品影视天天线| 亚洲日本一区二区三区| 欧美一区二区三区日韩| 国产成人在线视频免费播放| 亚洲黄网站在线观看| 日韩视频免费直播| 99re这里都是精品| 亚洲色图制服诱惑| 在线成人免费观看| 国产一区二区三区在线看麻豆| 欧美xxxxxxxx| 欧洲生活片亚洲生活在线观看| 美女一区二区久久| 亚洲欧美日韩久久| 精品播放一区二区| 在线观看欧美精品| 国产寡妇亲子伦一区二区| 五月综合激情网| 欧美韩国一区二区| 日韩免费观看高清完整版| 色狠狠色噜噜噜综合网| 国产一区二区91| 午夜欧美在线一二页| 国产精品妹子av| 精品福利二区三区| 9191成人精品久久| av电影在线观看一区| 精品一区二区三区免费| 香蕉加勒比综合久久| 亚洲欧洲国产日本综合| 久久久久久久久久看片| 欧美精品在线视频| 色婷婷亚洲精品| 国产aⅴ综合色| 精品在线一区二区| 日韩精品电影在线| 亚洲一区二区三区在线播放| 中文字幕一区二区三区在线观看| 精品国产一区二区精华 | 99久久久免费精品国产一区二区| 麻豆91免费看| 麻豆精品国产传媒mv男同| 亚洲小说春色综合另类电影| 国产精品女主播在线观看| 欧美成人精品1314www| 制服丝袜成人动漫| 欧美视频三区在线播放| 91在线国产福利| 成人91在线观看| 成人精品国产一区二区4080| 国产在线不卡一区| 国产一区二区三区视频在线播放| 奇米色777欧美一区二区| 视频一区视频二区在线观看| 亚洲国产综合人成综合网站| 亚洲福利一区二区三区| 亚洲成av人片在线观看| 亚洲综合男人的天堂| 樱桃视频在线观看一区| 一区二区三区在线不卡| 亚洲一二三区在线观看| 午夜精品一区二区三区三上悠亚| 午夜精品久久久久久久99樱桃| 亚洲va国产天堂va久久en| 日韩精品乱码免费| 免费成人在线视频观看| 蜜桃一区二区三区在线| 国产一区二区三区四| 成人免费视频视频| 99国产精品久久| 欧美性猛片aaaaaaa做受| 欧美日韩不卡在线| 日韩美一区二区三区| 国产拍揄自揄精品视频麻豆| 国产精品免费久久| 亚洲午夜一二三区视频| 麻豆成人久久精品二区三区红 | 在线亚洲一区二区| 欧美日韩精品高清| 精品国产电影一区二区| 久久久久亚洲蜜桃| 亚洲三级电影全部在线观看高清| 亚洲一区二区三区中文字幕| 青青草97国产精品免费观看| 国产成人在线网站| 欧美手机在线视频| 91精品国产麻豆国产自产在线| 久久在线免费观看| 亚洲人快播电影网| 秋霞电影网一区二区| 风流少妇一区二区| 欧美日韩高清影院| 国产午夜一区二区三区| 亚洲国产成人精品视频| 国产精品影视在线| 欧美亚洲一区二区三区四区| xfplay精品久久| 亚洲一区二区精品视频| 国产一区二区三区国产| 欧美在线不卡一区| 国产三级久久久| 五月激情丁香一区二区三区| 国产一区二区三区久久悠悠色av| 欧美在线影院一区二区| 国产三级欧美三级| 丝袜美腿亚洲一区| av网站一区二区三区| 欧美大胆人体bbbb| 亚洲影视在线播放| 成人av在线一区二区三区| 91精品国产美女浴室洗澡无遮挡| 亚洲欧洲日产国产综合网| 九一九一国产精品| 欧美日本高清视频在线观看| 中文字幕国产一区二区| 麻豆专区一区二区三区四区五区| 日本精品视频一区二区| 国产网站一区二区| 麻豆精品国产91久久久久久| 欧美在线观看你懂的| 亚洲欧美国产77777| 成人妖精视频yjsp地址| 欧美成人艳星乳罩| 日韩成人免费看| 欧美日韩免费一区二区三区| 亚洲婷婷综合久久一本伊一区| 国产精品资源在线| 久久综合国产精品| 老司机免费视频一区二区| 欧美老肥妇做.爰bbww视频| 一区二区三区中文字幕电影 | 日韩高清在线一区| 欧美视频第二页| 午夜视频在线观看一区二区 | 成人精品一区二区三区中文字幕| 91精品国产入口| 视频一区二区三区中文字幕| 色视频欧美一区二区三区| 国产精品久久久久久久久免费相片 | 成人激情小说乱人伦| 国产欧美日韩综合| 国产激情精品久久久第一区二区| 精品国产91洋老外米糕| 国产精品香蕉一区二区三区| 国产亚洲成av人在线观看导航| 国产福利精品导航| 国产精品人成在线观看免费| 99国产精品国产精品久久|