婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > AJAX和JSP實現的基于WEB的文件上傳的進度控制代碼第1/2頁

AJAX和JSP實現的基于WEB的文件上傳的進度控制代碼第1/2頁

熱門標簽:許昌智能電銷機器人公司 上海浦東騰訊地圖標注位置 姜堰電銷機器人 電銷機器人違法了嗎 澳大利亞城市地圖標注 遼寧銀行智能外呼系統 辰溪地圖標注 遼寧正規電銷機器人 海南銀行智能外呼系統商家
1.引言
2.實現代碼
2.1.服務器端代碼
2.1.1. 文件上傳狀態類(FileUploadStatus)
2.1.2. 文件上傳狀態偵聽類(FileUploadListener)
2.1.3. 后臺服務類(BackGroundService)
2.1.4. 文件上傳狀態控制類(BeanControler)
2.2. 客戶端代碼
2.2.1. AjaxWrapper.js
2.2.2. fileUpload.html
2.2.3. result.jsp
2.2.4. fileUpload.css
2.3. 配置文件
3. 結語

 1. 引言

   基于瀏覽器的文件上傳,特別是對于通過input type="file">標簽來實現上傳的情況, 存在著嚴重的性能問題,因為用戶提交了文件之后,在瀏覽器把文件上傳到服務器的過程中,界面看上去似乎是靜止的,如果是小文件還好些,如果不幸需要上傳的是幾兆、幾十兆甚至上百兆的文件,我相信那是一種非常痛苦的體驗,我們中間的很多人應該都有過此種不堪的經歷。(一笑)

  現在我就針對這個問題給出一個解決方案,我們將實現一個具有監控能力的WEB上傳的程序——它不僅把文件上傳到服務器,而且"實時地"監視文件上傳的實際過程。

解決方案的基本思路是這樣的:

  •   在Form提交上傳文件同時,使用AJAX周期性地從Servlet輪詢上傳狀態信息
  •   然后,根據此信息更新進度條和相關文字,及時反映文件傳輸狀態
  •   如果用戶取消上傳操作,則進行相應的現場清理工作:刪除已經上傳的文件,在Form提交頁面中顯示相關信息
  •   如果上傳完畢,顯示已經上傳的文件內容(或鏈接)

在介紹源代碼之前,我們先來看看程序運行界面:

 2. 實現代碼

   實現代碼想當然的有服務器端代碼和客戶端代碼(呵呵),我們先從服務器端開始。

 2.1. 服務器端代碼

  2.1.1. 文件上傳狀態類(FileUploadStatus)

   使用FileUploadStatus這個類記錄文件上傳狀態,并將其作為服務器端與web客戶端之間通信的媒介,通過對這個類對象提供上傳狀態作為服務器回應發送給web客戶端, web客戶端使用JavaScript獲得文件上傳狀態。源代碼如下:

/**
 * 本例程演示了通過Web上傳文件過程中的進度顯示。您可以對本例程進行任何修改和使用。
 * 如果需要轉載本例程,請您注明作者。
 *
 * 作者: 劉作晨
 * EMail:liuzuochen@gmail.com
 */
package liuzuochen.sample.upload;
import java.util.*;
public class FileUploadStatus {
  //上傳用戶地址
  private String uploadAddr;
  //上傳總量
  private long uploadTotalSize = 0;
  //讀取上傳總量
  private long readTotalSize = 0;
  //當前上傳文件號
  private int currentUploadFileNum = 0;
  //成功讀取上傳文件數
  private int successUploadFileCount = 0;
  //狀態
  private String status = "";
  //處理起始時間
  private long processStartTime = 0l;
  //處理終止時間
  private long processEndTime = 0l;
  //處理執行時間
  private long processRunningTime = 0l;
  //上傳文件URL列表
  private List uploadFileUrlList = new ArrayList();
  //取消上傳
  private boolean cancel = false;
  //上傳base目錄
  private String baseDir = "";
  public FileUploadStatus() {
  }
  public String getBaseDir() {
    return baseDir;
  }
  public void setBaseDir(String baseDir) {
    this.baseDir = baseDir;
  }
  public boolean getCancel() {
    return cancel;
  }
  public void setCancel(boolean cancel) {
    this.cancel = cancel;
  }
  public List getUploadFileUrlList() {
    return uploadFileUrlList;
  }
  public void setUploadFileUrlList(List uploadFileUrlList) {
    this.uploadFileUrlList = uploadFileUrlList;
  }
  public long getProcessRunningTime() {
    return processRunningTime;
  }
  public void setProcessRunningTime(long processRunningTime) {
    this.processRunningTime = processRunningTime;
  }
  public long getProcessEndTime() {
    return processEndTime;
  }
  public void setProcessEndTime(long processEndTime) {
    this.processEndTime = processEndTime;
  }
  public long getProcessStartTime() {
    return processStartTime;
  }
  public void setProcessStartTime(long processStartTime) {
    this.processStartTime = processStartTime;
  }
  public long getReadTotalSize() {
    return readTotalSize;
  }
  public void setReadTotalSize(long readTotalSize) {
    this.readTotalSize = readTotalSize;
  }
  public int getSuccessUploadFileCount() {
    return successUploadFileCount;
  }
  public void setSuccessUploadFileCount(int successUploadFileCount) {
    this.successUploadFileCount = successUploadFileCount;
  }
  public int getCurrentUploadFileNum() {
    return currentUploadFileNum;
  }
  public void setCurrentUploadFileNum(int currentUploadFileNum) {
    this.currentUploadFileNum = currentUploadFileNum;
  }
  public String getStatus() {
    return status;
  }
  public void setStatus(String status) {
    this.status = status;
  }
  public long getUploadTotalSize() {
    return uploadTotalSize;
  }
  public String getUploadAddr() {
    return uploadAddr;
  }
  public void setUploadTotalSize(long uploadTotalSize) {
    this.uploadTotalSize = uploadTotalSize;
  }
  public void setUploadAddr(String uploadAddr) {
    this.uploadAddr = uploadAddr;
  }
  public String toJSon() {
    StringBuffer strJSon = new StringBuffer();
    strJSon.append("{UploadTotalSize:").append(getUploadTotalSize()).append(
        ",")
        .append("ReadTotalSize:").append(getReadTotalSize()).append(",")
        .append("CurrentUploadFileNum:").append(getCurrentUploadFileNum()).
        append(",")
        .append("SuccessUploadFileCount:").append(
            getSuccessUploadFileCount()).append(",")
        .append("Status:'").append(getStatus()).append("',")
        .append("ProcessStartTime:").append(getProcessStartTime()).
        append(",")
        .append("ProcessEndTime:").append(getProcessEndTime()).append(
            ",")
        .append("ProcessRunningTime:").append(getProcessRunningTime()).
        append(",")
        .append("Cancel:").append(getCancel()).append("}");
    return strJSon.toString();
  }
}

  2.1.2. 文件上傳狀態偵聽類(FileUploadListener)

   使用Common-FileUpload 1.2版本(20070103)。此版本提供了能夠監視文件上傳情況的ProcessListener接口,使開發者通過FileUploadBase類對象的setProcessListener方法植入自己的Listener。 FileUploadListener類實現了ProcessListener,在整個文件上傳過程中,它對上傳進度進行監控,并且根據上傳 情況實時的更新上傳狀態Bean。源代碼如下:

/**
 * 本例程演示了通過Web上傳文件過程中的進度顯示。您可以對本例程進行任何修改和使用。
 * 如果需要轉載本例程,請您注明作者。
 *
 * 作者: 劉作晨
 * EMail:liuzuochen@gmail.com
 */
package liuzuochen.sample.upload;
import org.apache.commons.fileupload.ProgressListener;
import javax.servlet.http.HttpServletRequest;
public class FileUploadListener implements ProgressListener{
	private HttpServletRequest request=null;
	public FileUploadListener(HttpServletRequest request){
		this.request=request;
	}
	/**
	 * 更新狀態
	 */
	public void update(long pBytesRead, long pContentLength, int pItems){
		FileUploadStatus statusBean= BackGroundService.getStatusBean(request);
		statusBean.setUploadTotalSize(pContentLength);
		//讀取完成
	  if (pContentLength == -1) {
	    statusBean.setStatus("完成對" + pItems +"個文件的讀取:讀取了 " + pBytesRead + " bytes.");
	    statusBean.setReadTotalSize(pBytesRead);
	    statusBean.setSuccessUploadFileCount(pItems);
	    statusBean.setProcessEndTime(System.currentTimeMillis());
	    statusBean.setProcessRunningTime(statusBean.getProcessEndTime());
	  //讀取中
	  } else {
	    statusBean.setStatus("當前正在處理第" + pItems +"個文件:已經讀取了 " + pBytesRead + 
"/" + pContentLength+ " bytes."); statusBean.setReadTotalSize(pBytesRead); statusBean.setCurrentUploadFileNum(pItems); statusBean.setProcessRunningTime(System.currentTimeMillis()); } BackGroundService.saveStatusBean(request,statusBean); } }
12下一頁閱讀全文
您可能感興趣的文章:
  • Jsp頁面實現文件上傳下載類代碼
  • jsp中點擊圖片彈出文件上傳界面及預覽功能的實現
  • jsp實現文件上傳下載的程序示例
  • Jsp+Servlet實現文件上傳下載 文件上傳(一)
  • jsp文件上傳與下載實例代碼
  • jsp中點擊圖片彈出文件上傳界面及實現預覽實例詳解
  • 利用jsp+Extjs實現動態顯示文件上傳進度
  • jsp 文件上傳瀏覽,支持ie6,ie7,ie8
  • servlet+JSP+mysql實現文件上傳的方法
  • JSP實現文件上傳功能

標簽:伊春 深圳 西藏 崇左 晉城 撫州 銅川 威海

巨人網絡通訊聲明:本文標題《AJAX和JSP實現的基于WEB的文件上傳的進度控制代碼第1/2頁》,本文關鍵詞  AJAX,和,JSP,實現,的,基于,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《AJAX和JSP實現的基于WEB的文件上傳的進度控制代碼第1/2頁》相關的同類信息!
  • 本頁收集關于AJAX和JSP實現的基于WEB的文件上傳的進度控制代碼第1/2頁的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 贡觉县| 珠海市| 临西县| 正镶白旗| 大同县| 多伦县| 岢岚县| 三台县| 英吉沙县| 竹北市| 普陀区| 沂南县| 商城县| 山丹县| 靖安县| 赣榆县| 云和县| 榆社县| 平定县| 镇雄县| 锡林郭勒盟| 峨眉山市| 开远市| 靖边县| 韶山市| 阿鲁科尔沁旗| 正宁县| 九江市| 西华县| 松潘县| 萍乡市| 甘孜县| 宾阳县| 定南县| 达孜县| 白水县| 邢台县| 青阳县| 图片| 广河县| 方正县|